所以我有一个n长度的服务器列表。我需要打开一个连接并编辑一个文件并关闭它。
以下是我目前的情况:
#!/bin/bash
server_list=(a b c d)
for i in "${server[@]}"; do ssh "${server[@]}"; cd /etc; cp file file.bak; perl -pi -i 's/find/replace/g' file; exit; done
我唯一的问题是我无法退出ssh连接并转到数组中的下一个连接。我使用-n
,-t
和-T
选项无济于事。
感谢。
答案 0 :(得分:1)
您当前的代码不会向ssh
会话发送任何命令。使用heredoc将命令传递到ssh
:
#!/bin/bash
server_list=(a b c d)
for i in "${server_list[@]}"; do
#
# As per Charles' suggestion - "bash -s" makes sure the commands
# would run with Bash rather than the default shell on the remote
# server.
#
# I have left your commands exactly as in your question.
# They can be written as a single command as per @chepner's recommendation
ssh "$i" bash -s << "EOF"
cd /etc
cp file file.bak
perl -pi -i 's/find/replace/g' file
exit
EOF
done