首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash函数将本地archive.tar.gz中的测试ssh存档远程文件夹作为参数提供->“->”也打包在tar文件中

Bash函数将本地archive.tar.gz中的测试ssh存档远程文件夹作为参数提供->“->”也打包在tar文件中
EN

Stack Overflow用户
提问于 2017-10-16 17:24:21
回答 2查看 34关注 0票数 0

你好,我有一个bash函数:

代码语言:javascript
运行
复制
function echoAndExecArgs 
{

echo -e "\n\n======== command: $@  ========"
$@

}

它将命令及其所有参数回显到stdout并执行它。

现在我给出以下命令:

代码语言:javascript
运行
复制
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输出?

这种方法给出了同样错误的结果:

代码语言:javascript
运行
复制
ssh user@host "tar -zcf - /someFolder" > archive.gz
EN

回答 2

Stack Overflow用户

发布于 2017-10-16 17:31:40

问题似乎是输出重定向到了管道,也许可以尝试一下

代码语言:javascript
运行
复制
echo -e "..." > /dev/tty
票数 0
EN

Stack Overflow用户

发布于 2017-10-16 17:36:16

你可以在你的函数中写入stderr:

代码语言:javascript
运行
复制
echoAndExecArgs() {
    printf "\n\n======== command: %s ========\n" "$*" >&2
    "$@"
}

当在echo -e

  • Quote

中执行时,

  • 最好使用更可移植的printf而不是shell "$@"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46766935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档