2016-07-07 219 views
1

我想ssh到一個節點並在那裏運行一個命令,然後退出。所有點頭都重複了這一點。該腳本是相當簡單的bash腳本ssh並運行命令

#!/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 

,但我得到

./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

您接受的答案應該可行。但是,你的在線文件方式也沒有錯。我想,你已經在'exit'行之後的'END'之前添加了一些空格。或者,如果您將這些空格用於縮進,請將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

我會改劇本,並會用命令來運行ssh命令執行。

例如:

#!/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 

&&操作者意味着只有如果先前的命令成功的每個命令將被執行。

如果要獨立運行該命令,則可以改爲將&&運算符更改爲;