2013-03-25 73 views
0

長話短說,我有一個腳本塊,看起來像這樣:

cd ${1} # via command-line argument 
find . -name "output*.txt" | xargs cat ${1} | grep -v ${filter} > temp.txt 

我基本上一到這個點買入建設命令行中的find ...行,然後將其粘貼到我的腳本中,然後添加cd命令,以便在將在大量目錄上運行此腳本的包裝器中重複使用此腳本。反正...

的問題是,cdxargs使用相同的${1}變量,它有點makese

我知道,我可以從xargs${1}說法,我可能可以重寫find命令不需要xargs可言,但我的問題是:

有沒有一種方法來「復位」 ${1}後,我用它來cd使xargs

回答

2

我不熟悉的版本xargs使用${1}作爲默認替換字符串,但下面應該工作:

find . -name "output*.txt" | xargs -I '{}' cat '{}' | grep -v ${filter} > temp.txt 
0

效用xargs的只是管理參數的個數有牙套行爲作爲參數或文件名的佔位符{}。

我的確模擬了你的包裝,並且遇到同樣的問題,因爲$ {1}傳遞給我的函數的路徑名被xargs拾取......但這是shell的工作方式,實際上shell只是替代/展開所有變量和東西,使命令執行

效用ARNT編碼由自己來照顧這個之前完成,他們只是不這樣做...... 例如:

echo * ; 

這裏shell會擴展*並將其替換爲當前目錄中的所有文件名並將它們傳遞給echo ut在執行命令之前作爲參數echo *

同樣在您的情況下,shell將$ {1}擴展爲您在執行命令之前通過的路徑名值.....這就是爲什麼你得到了你了。

解決方法:你可以只使用大括號(空當然)或更好剛落,他們.......它工作正常,我.....

find . -iname "*${filename}*" | xargs ls -l | more commands ....; 

希望這會有所幫助。