我有这部分脚本,我无法工作。一直在寻找,但我必须在这里遗漏一些东西。
export RULE=`cat iptables_sorted.txt`
ssh hostname << EOF
for line in $RULE; do
echo \$line >> test.txt (I have tried with and without slashes, etc...)
done
exit
EOF
运行这部分脚本后,我得到了
stdin: is not a tty
-bash: line 2: syntax error near unexpected token `103.28.148.0/24'
-bash: line 2: `103.28.148.0/24'
...这很奇怪,因为iptables_sorted.txt只是充满了ip范围(当我在本地运行时,它可以工作)。
答案 0 :(得分:3)
$ RULE中的换行符导致问题。用空格替换它们:
RULE=$(< iptables_sorted.txt)
RULE=${RULE//$'\n'/ }
ssh hostname << EOF
for line in $RULE ; do
echo \$line >> test.txt
done
EOF
请注意,这不适用于包含空格的行。
答案 1 :(得分:0)
不要使用for
来迭代文件;使用while
。这也演示了将循环的输出(而不仅仅是每个echo
)输出到远程主机。 cat
用于读取传入的数据并将其重定向到最终的输出文件。
while IFS= read -r line; do
echo "$line"
done | ssh hostname 'cat > test.txt'