
私はinf whileとforループを使ってリモートコンピュータからコマンド情報を取得するスクリプトを書いています。 PFBスクリプト。ただし、スクリプトは単一のコマンドメッセージを提供することによってのみ終了します。このファイルにはいくつかのコマンドがあります(CMDS=$HOMEDIR/cmnd.txt)
。 sshを使用しないとすべてのコマンドはうまく機能しますが、sshを使用すると最初のコマンドのみが実行されます。
#!/bin/bash
HOMEDIR=/home/448130
CMDS=$HOMEDIR/cmnd.txt
while read -r line
do
for i in $(cat hostname.txt);
do
echo "***************************** $line output begins ********************************";
#echo $line
ssh $i $line
echo "***************************** $line output ends ********************************";
done
done < $CMDS
この問題を解決するのに役立ちます。
答え1
を実行すると、ssh
標準入力がリモートコマンドに渡されます。リモートコマンドは実際には何もしませんが、ローカルssh
プロセスにはわかりません。これを防ぐために、リモートコマンドに入力を渡したくないので、入力ssh
を/dev/null
。
忘れないで二重引用符変数の置換。
IFS= は -r 行を読み込んでいる間 する $(catホスト名.txt)の場合。 する echo "****************************$ ライン出力開始**************** ** * ****************”; #echo$line SSH "$i" "$line"</dev/空 echo "**************************** $行末出力**************** *********************"; 完璧 完了<"$CMDS"