击功能给作为参数 - > 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 
+0

'stout'可能只是一个错字,但以防万一它应该是“标准输出”时,意思是“标准输出”。同样的'sterr'应该是“stderr”。 – Aaron

+0

请注意,您很少需要'$ @'在较大的带引号的字符串内。在下一行没有引用,它与没有引号的'$ *'没有区别,当然也不是*你想要的。 – chepner

的问题似乎输出重定向到管道,也许尝试

echo -e "..." > /dev/tty 

您可以编写标准错误在你的函数:

echoAndExecArgs() { 
    printf "\n\n======== command: %s ========\n" "$*" >&2 
    "[email protected]" 
}