SSH はコマンドの出力全体を表示しません。

SSH はコマンドの出力全体を表示しません。

20以上のサーバーのリストがあり、それらが使用するシェルを取得したいと思います。サーバーにログインしたら、次のコマンドを実行できます。

$ 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以外の番号。

すべては$コマンドではなくシェルによって行われます。サーバーのシェルがそれを評価できるようにエスケープする必要があります。

努力する\$\$


例えば

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

未テスト

関連情報