我需要远程重启多台机器。 通常我只是问题
for host in <hostlist>;do ssh ${host} 'sudo shutdown -r now';done
但是我想在重启之前给用户一些时间。 但是他们ssh会话将不会断开,即使我使用:
ssh -f 'sudo shutdown -r +5 &;disown'
我收到一条错误消息:
bash:-c:第0行:意外标记附近的语法错误
;' bash: -c: line 0:;' bash: -c: line 0:sudo shutdown -r +5&; disown'
有什么build议么?
如错误消息所述,您的命令中有语法错误。 这是由于一个稍微令人惊讶的事实,即&并不是shell命令的一部分,而是命令之间的分隔符(如; is)。 尽pipe两者都是命令分隔符&并且对左侧的命令有额外的影响。 这当然也使我困惑,而我经常犯同样的错误。 一旦你知道它,然而很容易修复。
解决办法是不要写&; 而只是根据你的意图写两个分隔符中的一个。 (并且在大多数情况下,人们已经写了&;目的只是写& )。
这应该工作:
ssh server 'sudo shutdown -r +5 & disown'