变量仍然无法在远程服务器上运行

时间:2015-10-21 08:35:45

标签: linux bash variables

我有这部分脚本,我无法工作。一直在寻找,但我必须在这里遗漏一些东西。

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范围(当我在本地运行时,它可以工作)。

2 个答案:

答案 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'