我想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
命令。因此,命令提示符等待输入!
有什么方法可以解决这个问题吗?
更新:
我将循环体修改为
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
答案 0 :(得分:1)
我更改脚本并使用要执行的命令运行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
&&
运算符表示只有在上一个命令成功时才会执行每个命令。
如果您想独立运行命令,可以将&&
运算符更改为;
。
答案 1 :(得分: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