Shell
用於重定向參數的 Shell 語法?
如果我想重定向的不是 stdio,而是作為程序輸出的參數,我應該使用 xargs 嗎?
例如,
ls
我希望文件名是下一個命令的參數,而不是輸入流。我在說什麼有一個很好的例子嗎?這個例子是膚淺的,但說明了我的意思:使用輸出
ls
作為參數來cat
顯示文件的內容。
首先,不要解析
ls
. 獲取文件名的可靠方法有很多,但不是ls
其中之一。下面使用 shell 的 globbing 來生成文件名,並傳遞一個以 nul 分隔的列表,
xargs
通過它們執行它們cat
:printf '%s\0' * | xargs -0 cat
我知道這樣做的目的是展示文件-> xargs。否則,當然,除非有太多文件無法放在命令行上,否則可以將上面的內容替換為:
cat *
更有選擇性
兩者
ls
和printf '%s\0' *
都將顯示目錄的所有內容,包括其子目錄。如果您想更有選擇性,例如,包括正常文件但不包括子目錄,那麼正如 cas 建議的那樣,find
是更好的工具:find . -maxdepth 1 -type f -print0 | xargs -0 cat
或者:
find . -maxdepth 1 -type f -exec cat {} +
find
有許多有用的選項。詳情請參閱man find
。