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