簡體   English   中英

Bash函數提供參數->本地archive.tar.gz中的ssh歸檔遠程文件夾->也打包在tar文件中的echo“ test”

[英]Bash function give as parameter -> ssh archive remote folder in local archive.tar.gz -> echo “test” also packed in tar file

嗨,我有一個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

該問題似乎是輸出重定向到管道,也許嘗試

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

您可以在函數中寫入stderr:

echoAndExecArgs() {
    printf "\n\n======== command: %s ========\n" "$*" >&2
    "$@"
}
  • 最好使用更多可移植的printf而不是echo -e
  • 在shell中執行時引用"$@"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM