使用Parallel与SSH命令时转义字符\n无法识别的问题求助
解决Parallel+SSH批量执行时换行符(\n)失效问题
问题原因
你遇到的问题是转义层级冲突导致的:本地Shell、Parallel、远程Shell会依次解析命令中的转义字符,原本的\n被提前解析成了普通字符n,没能传递到远程主机生效。
可行解决方案
方案1:双重转义换行符+调整引号
通过单引号包裹远程命令,避免本地Shell提前解析内容,同时将\n改为\\n,让远程Shell最终解析出换行符:
parallel -a argfile -j3 -k --tag ssh -lroot {} 'echo -e "test1\\ntest2" > ~/test.txt'
方案2:用printf替代echo -e(更跨平台)
echo -e的行为在不同系统(如GNU/BSD)存在差异,printf对转义字符的处理更统一可靠:
parallel -a argfile -j3 -k --tag ssh -lroot {} 'printf "test1\ntest2\n" > ~/test.txt'
方案3:Here Document(直观处理多行内容)
如果需要写入的内容较多,直接用Here Document传递多行文本,完全不需要转义换行符:
parallel -a argfile -j3 -k --tag ssh -lroot {} 'cat > ~/test.txt <<EOF test1 test2 EOF'
内容的提问来源于stack exchange,提问作者Yayong Duan
相关产品推荐
相关产品推荐

