2015-04-17 101 views

回答

5

which的輸出被輸送到標準輸入ls。但是,ls不需要任何標準輸入。你想要它(我認爲)作爲參數傳遞。有一對夫婦的這樣做的方法:

which cp | xargs ls -l 

ls -l `which cp` 

ls -l $(which cp) 

在第一個例子中,xargs命令將前一個命令的標準輸出和使每行都成爲其名稱緊跟在xargs之後的命令的參數。所以,例如

find/| xargs ls -l 

將在文件系統中的每個文件做一個ls -l(也有一些問題,這與獨有的命名文件,但已經超出了這個答案的範圍)。

其餘兩個是大致相同的,並使用shell來完成此操作,將which的輸出擴展到cp的命令行。

+0

嗨,@abligh,非常感謝你;我如何才能知道ls不會從STDIN中獲取任何東西? – pranav

+1

一個答案:閱讀手冊頁。更好的回答:當你輸入'ls -l/path/to/file'並按下回車鍵時,命令是否等待你通過鍵盤輸入更多的數據?不,它不。像'tr a z'這樣的東西會的。 – abligh

+0

謝謝@abligh,那是:) – pranav

2

這將是,

$ ls -l $(which cp) 
-rwxr-xr-x 1 root root 130304 Mar 24 2014 /bin/cp 

OR

$ which cp | xargs ls -l 
-rwxr-xr-x 1 root root 130304 Mar 24 2014 /bin/cp 

要通過一個命令的輸出作爲另一個命令的參數,你需要使用xargs與沿管道符號。

man xargs

xargs的 - 建立和執行從標準input.xargs命令行讀取來自標準輸入項目 ,由坯件(其可以被保護 與雙或單引號或反斜槓)分隔或換行符,並執行 命令(默認爲/ bin/echo)一次或多次,其中任何初始-參數後跟從標準輸入讀取的項目。 上的空白行將被忽略。

+0

謝謝@AvinashRaj :) – pranav