我需要远程重启一些机器。通常我只需要执行
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:
sudo shutdown -r +5 &;disown'
有什么建议么?
答案1
根据错误消息,您的命令中存在语法错误。这是由于一个略显令人惊讶的事实,它&
不是 shell 命令的一部分,而是命令之间的分隔符(如;
is)。虽然两者都是命令分隔符,但&
对其左侧的命令有额外的影响。这当然有时也会让我感到困惑,我经常犯同样的错误。一旦你知道了,它很容易修复。
解决方法是不写&;
,而是根据您的意图只写两个分隔符之一。(并且在大多数情况下,一个人写的&;
意图只是写&
)。
这应该有效:
ssh server 'sudo shutdown -r +5 & disown'