我正在嘗試編寫一個bash shell腳本(這是我沒有太多經驗的東西)在我正在運行的Unix機器上搜索C代碼通過ssh。「調試」bash shell腳本:轉義字符,傳遞參數
這是我的腳本代碼:
#! /bin/bash
find . \(-name '*.c' -o -name '*.h' \) -exec grep -n '<SEARCH_STRING>' {} + | sed -e "s/^\(\..*\.c\):\([0-9]*\):[ \t]*\(.*\)$/\1 :: \2\n\3\n/" | sed -e "s/^\(\..*\.h\):\([0-9]*\):[ \t]*\(.*\)$/\1 :: \2\n\3\n/" | sed ''/<SEARCH_STRING>/s//`printf "\033[31m<SEARCH_STRING>\033[0m"`/'' | less -R
注意,僅僅是我用什麼來代表我的搜索字符串,當然,我沒有真正尋找這個從字面上。
我意識到這有幾件事是錯誤的。首先,當我在命令行輸入最後一行(沒有它的#!/ bin/bash頭文件的「腳本」)時,它實際上工作得很好,給了我想要的結果。我知道,使它成爲一個bash腳本時,我應該逃避某些字符,但我試過幾個逃逸(組合)字符,它總是給我同樣的錯誤:
find: missing argument to `-exec'
./code_search.sh: line 4: <SEARCH_STRING>: command not found
sed: -e expression #1, char 43: unterminated `s' command
printf: usage: printf [-v var] format [arguments]
./code_search.sh: line 8: \033[31m<SEARCH_STRING>\033[0m: command not found
sed: -e expression #1, char 46: unterminated `s' command
而且,我知道我不該不會將搜索字符串硬編碼到我的腳本中,因爲將搜索字符串作爲參數提供給腳本會更加方便,但我真的無法弄清楚如何執行此操作。
正如我所說,我沒有很多寫bash腳本的經驗,並且我嘗試寫這個腳本來幫助我完成我的編碼工作。然而,我不能再花時間去調試這個看法,因爲這不是我的老闆支付我做的事情。我問過我的同事們,但他們都不能幫助我。
我知道這是一個有點廉價,不要付出很多努力去了解更多關於bash shell腳本編寫的內容,但就像我說的我真的無法節省時間。任何人都可以請幫我完成這個腳本?
非常感謝!
感謝您的幫助! 樣本輸入類似'./code_search.sh isValid',樣本輸出類似 '/users/user/code/codefile1.c :: 15 boolean isValid,activatesCheck; /users/user/code/codefile1.c :: 321 if(!isValid){' 儘管我仍然運行它,但仍然出現錯誤;顯示有問題發現: 查找:路徑必須在表達式 之前用法:find [-H] [-L] [-P] [path ...] [expression]' – user1719396