2013-12-10 76 views
0

我正在使用以下行來查找一些腳本並執行它們。這些腳本被命名爲:my_script_0.sh,my_script_1.sh等linux找到exec位置參數

find $MY_HOME/SHELL/my_script_[0-9].sh -type f -exec csh -c '"$1" >& "$logfile" &' {} \; 

這工作只是罰款,現在我想創建爲每個執行的腳本的獨特$logfile。 我意識到使用awk我可以這樣做來獲取文件的編號,然後在日誌文件名中使用它。

find $MY_HOME/SHELL/my_script_[0-9].sh -type f | awk -F"\\.|_" '{print $4}' 

問題是,我不相信我可以使用awk與原始語句,因爲我需要的位置參數是完整的路徑/文件名。

理想情況下,我想通過find -exec命令簡單地使用另一個位置參數。它存在嗎?

回答

1

-exec選項到find只是簡單地讓出給定的參數。既然你通過它csh -c ...它會啓動一個新的shell,你可以選擇傳遞一些參數(一個是{})。然後將這些參數設置爲新shell中的位置參數$1, $2, $3, ... ,$n。在這種情況下,find結果逐個傳遞,並在shell中用作$1

我會建議的替代方法,它使用一個循環,而不是你的find命令:

foreach script ($MY_HOME/SHELL/my_script_[0-9].sh) 
    csh -c "$script >& $script:r.log" 
end 

:r剝離它的附着,所以我們得到的日誌文件的變量擴展:my_script_n.log爲腳本my_script_n.sh

我檢查了對C-shell語法這些引用:

+0

看來,CSH不具備的循環? – McArthey

+0

@McArthey好的,這個答案適用於(ba)sh,在子shell中運行csh。抱歉。 – 2013-12-10 19:17:58

+0

太好了,謝謝!看來只需使用'foreach腳本($ MY_HOME/SHELL/my_script_ [0-9] .sh)'來處理它。 – McArthey