击功能给作为参数 - > SSH远程存档文件夹中的本地archive.tar.gz - >回声“测试”,也装在tar文件
问题描述:
您好我有一个bash函数:击功能给作为参数 - > SSH远程存档文件夹中的本地archive.tar.gz - >回声“测试”,也装在tar文件
function echoAndExecArgs
{
echo -e "\n\n======== command: [email protected] ========"
[email protected]
}
呼应的命令和它的所有参数stdout并执行它。
现在我给下面的命令:
ssh [email protected] tar -czvf- /someFolder 2>> sterr.log | dd of=archive.tar.gz
问题IST该字符串"\n\n======== command: [email protected] ========"
也被写进我的archive.tar.gz
文件的开头。
如果我这样做xxd -l 100 archive.tar.gz
我看到字符串"\n\n======== command: [email protected] ========"
写在文件的开头。这当然会导致文件被破坏并且不能像往常一样被提取的问题。
我的问题是:怎么可能给我的ssh命令作为参数传递给函数echoAndExecArgs
,它只是重定向tar命令的实际文件输出到文件archive.tar.gz
,而不是整个函数的所有性病输出?
这种方法使相同的错误的结果:
ssh [email protected] "tar -zcf - /someFolder" > archive.gz
答
的问题似乎输出重定向到管道,也许尝试
echo -e "..." > /dev/tty
答
您可以编写标准错误在你的函数:
echoAndExecArgs() {
printf "\n\n======== command: %s ========\n" "$*" >&2
"[email protected]"
}
- 更好地使用更便携0的代替
echo -e
- 报价
"[email protected]"
壳执行
'stout'可能只是一个错字,但以防万一它应该是“标准输出”时,意思是“标准输出”。同样的'sterr'应该是“stderr”。 – Aaron
请注意,您很少需要'$ @'在较大的带引号的字符串内。在下一行没有引用,它与没有引号的'$ *'没有区别,当然也不是*你想要的。 – chepner