2015-11-18 62 views
0

我試圖將命令行上的參數傳遞給〜/ .bash_profile中定義的函數。我已經看了一些關於stackoverflow的解決方案,但他們沒有工作。基本上,格式是這樣的:將參數傳遞給bash函數會導致錯誤

function rgrep { /usr/bin/grep -rl '[email protected]' . | /usr/bin/grep -v 'node_modules' | /usr/bin/grep -v 'bower'; } 

然而,當我試試這個:

rgrep 'foo' 

我得到

grep: foo: No such file or directory 
+2

' 「$ @」'而不是單引號? –

+1

本傑明W.是正確的,但我不明白你是如何從該代碼中獲取該錯誤消息; – chepner

+0

我也嘗試過。我嘗試了幾個排列組合。 –

回答

1

通常情況下,如果你得到你的命令序列從 '工作'命令行,那麼它可以作爲'功能' - 從命令行執行命令「工作」?另外,爲了避免與現有命令混淆,我建議添加一個'前綴',即'tf_'#測試函數。

你需要雙引號 - (「),而不是(')...... 我建議嘗試簡單的東西:

function tf_rgrep { grep -rl "[email protected]" . | grep -ve "node_modules|bower" ;} 

爲了調試加 '設置-x':

function tf_rgrep { set -x; grep -rl "[email protected]" . | grep -ve "node_modules|bower" ; set - ;} 

## try 'egrep' if above not working 

函數tf_rgrep {set -x; egrep -rl「$ @」。| egrep -ve「node_modules | bower」; set - ;}

將上述內容保存到文件中,即/tmp/test.functions.sh
然後使用「源」來測試...

source /tmp/test.functions.sh#編輯和重複,直到工作

一旦準備就緒/工作,添加到您的個人資料。

:)
戴爾

+0

如果我從命令行定義函數,它就起作用。如果我在bash_profile中定義它,我會得到「grep:foo:沒有這樣的文件或目錄。」這真讓我抓狂。 –

+0

您是否添加了「set -x」選項?你應該得到關於發生了什麼的更多信息。如果你嘗試'source ./my_functions.sh',它會工作嗎? –

+0

實際上,在函數名前綴固定它。因爲rgrep不在路徑中,而且不是我所知道的命令。 'set -x'沒有真正的幫助。 –