[英]Prevent 'cp' from outputting the file name from a bash script
我有一個Shell腳本,它將一些文件復制到當前目錄,對其進行壓縮,然后將壓縮后的文件流式傳輸到stdout。
在客戶端,我使用plink執行腳本並將stdin流傳輸到文件。
這幾乎可行。
從腳本內部執行時,似乎cp命令輸出正在復制的文件名。 如果我執行' cp / path / to / file1。 '在外殼上安靜地執行; 如果我在腳本中執行它,則會輸出“ file1”。
我該如何預防? 我試過將cp命令的輸出傳遞到/ dev / null和虛擬文本文件,但是沒有運氣。
謝謝你的幫助。
#!/bin/bash
cp /path/to/file1 .
cp /path/to/file2 .
cp /path/to/file3 .
tar -cvzf package.tgz file1 file2 file3
cat package.tgz
file1
file2
file3
<<binary data>>
不是cp,而是tar。 您將其傳遞給-v,這將使其打印文件名。
啊哈! 我一直以為tar發出的文件名將轉到stderr
,但並非總是如此:僅當您將tar文件寫入stdout
, -v
編寫的文件才轉到stderr
:
$ tar cvf - share > /dev/null
share/ # this must be going
share/.DS_Store # to stderr since we
share/man/ # redirected stdout to
share/man/.DS_Store # /dev/null above.
share/man/man1/
share/man/man1/diffmerge.man1
反例:
$ tar cvf blah.tar share > /dev/null
這沒有產生文件名列表,因為它們被發送到/dev/null
。 我想你每天都學到新東西。 :-)
正如其他人指出的那樣,tar的-v(詳細)選項會將文件名踢出到STDERR。 您還可以通過讓tar將壓縮文件流寫入STDOUT來提高腳本的效率:
tar zcf - file1 file2 file3
在此示例中,作為文件名傳遞的“-”選項使tar將輸出寫入STDOUT。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.