我正在尝试从文本文件中检索一行,将其写入本地文件,然后将其与 IP 列表合并到一个新文件中。但是,我认为我在转义所有参数时遇到了问题,因为它只执行主机列表的第一行。
以下是我目前所掌握的信息:
#!/bin/bash
file="~/hosts"
while IFS= read -r server; do
ssh -t name@$server "sudo awk -F '=' 'FNR == 2 {print \$2}' /etc/version.txt > ~/version"
done < "$file"
paste ~/hosts ~/version > ~/ip_and_version
答案1
~
不会在引号内展开。您可以使用file=~/"hosts"
或file="$HOME/hosts"
ssh
会吞噬 stdin:这是你的主要问题。ssh -t ... < /dev/null
请注意你正在写入版本文件在远程服务器上,而不是本地计算机上您自己的主目录。您想要这个吗?
ssh -t "name@$server" "sudo awk -F= 'FNR == 2 {print \$2}' /etc/version.txt" < /dev/null > ~/version
怎么样:
remote_command="sudo awk -F '=' 'FNR == 2 {print \$2}' /etc/version.txt"
readarray -t servers < ~/hosts
for server in "${servers[@]}"; do
ssh -t name@$server "$remote_command"
done > ~/version
paste ~/hosts ~/version > ~/ip_and_version