好吧,我看到了其他问题,但我认为我的问题不适用,所以我在这里……我是一名刚接触bash脚本的程序员 我想SSH到我的亚马逊实例,然后启动自己的.sh文件 伪:
{
ssh -i ...
cd /../
./blah.sh
profit!
}
我有多个(5+)实例保存在txt文件中,我想循环播放,因此最终每个实例都会有自己的ssh对话框。 文本文件具有完整的命令
"ssh -i blah.pem ubuntu@ec2-blah.amazonaws.com"
更新:
#!/bin/bash
while read LINE
do
[ ! -f /tmp/$(basename $0) ] && cp $0 /tmp/ && konsole -e $0 && exit
rm /tmp/$(basename $0) # open separate window for code to run
$LINE << EOF # read line (ssh cmd)
cd /st/task/ #commands during ssh
./start.sh #need something to let this run and go back to beginning of loop
EOF
done < pdns.txt
到目前为止,在您的帮助下,我已经可以工作了……所以我的新问题是,在执行第一个ssh操作后,它不会循环到下一个ssh操作,因为start.sh
文件没有结束(通过设计)。需要帮助!
答案 0 :(得分:0)
我猜您可能正在寻找类似的东西
while read -r ignore stuff pem host; do
ssh -i "$pem" "${host%\"}" 'cd .. && ./blah.sh' </dev/null
done <input.txt
如果您可以从文件input.txt
中删除引号和其他垃圾,使其仅包含主机名和PEM,甚至可以避免将此信息存储在单独的文件中,则可以简化为
while read -r host pem; do
ssh -i "$pem" "$host" 'cd .. && ./blah.sh' </dev/null
done <<\____HERE
server1.example.com server1.pem
server2.example.net second.pem
third.example.org number3.pem
____HERE
一个常见的错误来源是让ssh
吞噬您打算供while read -r
读取的输入;重定向</dev/null
阻止了这种情况的发生。
顺便说一句,许多脚本不需要在它们存储的目录中运行。也许简单地../blah.sh
也可以正常工作。同样,脚本文件应该相切地不具有.sh
扩展名。