使用 sed 附加带有远程 ssh 的字符串无法正常工作
Using sed to append string with remote ssh not working expected
我想将一些文本附加到远程文件,但下面的命令可以在本地成功执行,但使用 ssh 失败。
命令 1,失败:
for i in $(cat serverlist.txt);do ssh user@$i sed -i "$a a" /tmp/test.txt;done
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
command2 成功:
for i in $(cat serverlist.txt);do ssh user@$i sed -i "$a t" /tmp/test.txt;done
command3 失败:
for i in $(cat serverlist.txt);do ssh -T user@$i sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt;done
sed: -e expression #1, char 45: expected newer version of sed
sed: -e expression #1, char 45: expected newer version of sed
sed: -e expression #1, char 45: expected newer version of sed
command4 成功:
echo " sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt" >sed.cmd
for i in $(cat serverlist.txt);do ssh -T user@$i $(cat sed.cmd) /tmp/test.txt;done
非常感谢!
您需要转义或引用来自本地和远程的字符串 shell。
切向,也 don't read lines with for
。
while IFS='' read -r host; do
ssh user@"$host" "sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt"
done <serverlist.txt
注意远程命令周围的双引号,反斜杠转义以引用美元符号和双引号内的文字反斜杠。
我想将一些文本附加到远程文件,但下面的命令可以在本地成功执行,但使用 ssh 失败。
命令 1,失败:
for i in $(cat serverlist.txt);do ssh user@$i sed -i "$a a" /tmp/test.txt;done
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
sed: -e expression #1, char 3: expected \ after `a', `c' or `i'
command2 成功:
for i in $(cat serverlist.txt);do ssh user@$i sed -i "$a t" /tmp/test.txt;done
command3 失败:
for i in $(cat serverlist.txt);do ssh -T user@$i sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt;done
sed: -e expression #1, char 45: expected newer version of sed
sed: -e expression #1, char 45: expected newer version of sed
sed: -e expression #1, char 45: expected newer version of sed
command4 成功:
echo " sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt" >sed.cmd
for i in $(cat serverlist.txt);do ssh -T user@$i $(cat sed.cmd) /tmp/test.txt;done
非常感谢!
您需要转义或引用来自本地和远程的字符串 shell。
切向,也 don't read lines with for
。
while IFS='' read -r host; do
ssh user@"$host" "sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /tmp/test.txt"
done <serverlist.txt
注意远程命令周围的双引号,反斜杠转义以引用美元符号和双引号内的文字反斜杠。