我在Bash shell腳本中編寫了一個函數來搜索Linux樹中與包含正則表達式的模式相匹配的文件名,顏色突出顯示:Bash shell腳本函數提供了「find:缺少參數到`-exec'」錯誤
function ggrep {
LS_="ls --color {}|sed s~./~~"
[ -n "$1" -a "$1" != "*" ] && NAME_="-iname $1" || NAME_=
[ -n "$2" ] && EXEC_="egrep -q \"$2\" \"{}\" && $LS_ && egrep -n \"$2\" --color=always \"{}\"|sed s~^B~\ B~" || EXEC_=$LS_
FIND_="find . -type f $NAME_ -exec sh -c \"$EXEC_\" \\;"
echo -e \\e[7m $FIND_ \\e[0m
$FIND_
}
eg ggrep a*
列出所有文件開始與當前目錄樹下a
,
和文件的ggrep a* x
名單開始a
和含x
當我運行它,我得到:
find: missing argument to `-exec'
即使我當我通過「echo」將行輸出複製並粘貼到終端中時,獲得正確的輸出。任何人都可以告訴我我做錯了什麼嗎?
其次,如果ggrep * x
列出包含x
所有文件,但*
擴展到文件名列表,我需要使用\*
或'*'
而是將是巨大的。有沒有解決的辦法?謝謝!
作爲一般規則,將命令作爲字符串放入shell變量並稍後運行會導致很多引用的痛苦。我會建議找到解決問題的另一種方法。如果您必須將命令存儲在變量中,請使用[arrays](http://www.thegeekstuff.com/2010/06/bash-array-tutorial/)。 –