你好,我有一个bash函数:
function echoAndExecArgs
{
echo -e "\n\n======== command: $@ ========"
$@
}它将命令及其所有参数回显到stdout并执行它。
现在我给出以下命令:
ssh root@remoteMachine tar -czvf- /someFolder 2>> sterr.log | dd of=archive.tar.gz问题是字符串"\n\n======== command: $@ ========"也被写入到我的archive.tar.gz文件的开头。
如果我执行xxd -l 100 archive.tar.gz,我会看到字符串"\n\n======== command: $@ ========"被写在文件的开头。这当然会导致文件被破坏并且无法像往常一样提取的问题。
我的问题是:如何将我的ssh命令作为参数提供给函数echoAndExecArgs,它只将tar命令的实际文件输出重定向到文件archive.tar.gz中,而不是整个函数的所有std输出?
这种方法给出了同样错误的结果:
ssh user@host "tar -zcf - /someFolder" > archive.gz发布于 2017-10-16 17:31:40
问题似乎是输出重定向到了管道,也许可以尝试一下
echo -e "..." > /dev/tty发布于 2017-10-16 17:36:16
你可以在你的函数中写入stderr:
echoAndExecArgs() {
printf "\n\n======== command: %s ========\n" "$*" >&2
"$@"
}当在echo -e
中执行时,
printf而不是shell "$@"https://stackoverflow.com/questions/46766935
复制相似问题