ssh 未显示命令的完整输出

ssh 未显示命令的完整输出

我有一个 20 多个服务器的列表,我想获取他们正在使用的 shell。登录到服务器后,我可以运行以下命令

$ ps -p $$
PID TTY          TIME CMD
12022 pts/6    00:00:00 bash

我尝试用列表循环它,而不是接触每个服务器并执行此操作

$ for i in `cat servlist`; do echo $i ; ssh $i ps -p $$ ; done
serv1
PID TTY          TIME CMD
serv2
PID TTY          TIME CMD
serv3
PID TTY          TIME CMD

循环此操作不会显示预期的输出。然后我尝试 ssh 到单个服务器并运行命令,但出现了相同的错误。

$ ssh serv4 ps -p $$
PID TTY          TIME CMD

为什么会发生这种情况,ssh 手册页中没有任何内容让我想到。

答案1

那是因为该进程不存在。

正在$$本地评估,并且所有服务器都传递相同的数字。不是服务器上当前使用的 PID 的数字。

所有的$事情都是由 shell 完成的,而不是命令。您需要转义它,以便服务器上的 shell 对其进行评估。

尝试\$\$


例如

for i in $(cat servlist); do echo $i; ssh $i 'ps -p $$'; done

未经测试的

相关内容