2016-07-07 36 views
1

ノードにsshしてコマンドを実行して終了します。これはすべてのnodに対して繰り返されます。スクリプトはsshを実行してコマンドを実行するbashスクリプト

#!/bin/bash 
NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
for i in $NODES 
do 
    ssh $i 
    ls -l /share/apps 
    rpm -ivh /share/apps/file.rpm 
    exit 
done 

非常に簡単です。しかし問題は、SSH後、ls -lコマンドが見逃している、ということです。したがって、コマンドプロンプトは入力を待機します。

これを修正する方法はありますか?

UPDATE:

私は

ssh $i <<END 
ls -l /share/apps 
exit 
END 

として、ループ本体を変更しかし、私は、スクリプトを変更したいとするコマンドでsshコマンドを実行します

./lst.sh: line 9: warning: here-document at line 5 delimited by end-of-file (wanted `END') 
./lst.sh: line 10: syntax error: unexpected end of file 
+2

がhttp://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etc – Leon

+0

を参照してください試してみてくださいスクリプトの 'ssh'セクションをインデントするには' << - END'を使用してください – Leon

+1

あなたが受け入れた答えはうまくいくはずです。しかし、あなたのhere-docのアプローチも間違っていませんでした。私は、 'exit'行の後に' END'の前にスペースを追加したと思います。また、インデントのためにこれらのスペースをwntした場合は、heredoc行を 'ssh $ i << - END'に変更してください(' << 'の代わりに' << - ') – anishsane

答えて

1

したい場合は、この

#!/bin/bash 
    NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
    for i in $NODES 
    do 
     ssh $i "ls -l /share/apps;rpm -ivh /share/apps/file.rpm;exit;" 
    done 
0

を取得します実行する。例えば

#!/bin/bash 
NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
for i in $NODES 
do 
    ssh $i "ls -l /share/apps && rpm -ivh /share/apps/file.rpm && exit" 
done 

&&オペレータが前のコマンドが成功した場合にのみ、各コマンドが実行されることを意味します。

コマンドを単独で実行する場合は、代わりに&&演算子を;に変更することができます。

関連する問題