Bash
如何讓外部程序知道我的 bash 函式
我有 bash 函式
foo
,並且bar
在我的~/.bashrc
.函式
foo
呼叫一個外部命令ext_command
,該命令本身將另一個命令作為其參數之一。我想bar
作為那個命令傳遞,即我希望我.bashrc
看起來像這樣:bar() { ... } foo() { ext_command --invoke bar }
但是,這不起作用,因為不是 shell 腳本的外部命令不知道
bar
. 我該如何解決這個問題?我想改為
ext_command --invoke "bash -c 'bar'"
但是這個呼叫中的 Bash 不是作為互動式 shell 執行的,所以它也不知道
bar
。因此,我相信解決我的問題的一種方法是強制 Bash 作為互動式 shell 執行。不幸的是,我不知道該怎麼做。
我認為絕對應該有效的另一種方法是使用
ext_command --invoke "bash -c 'source ~/.bashrc; bar'"
但由於某種原因,這不起作用,實際上只是在執行
bash -c 'source ~/.bashrc; bar'
在互動式 bash 會話中給出
bash: bar: command not found
無論如何,我不喜歡那個解決方案,因為
foo
無論它來自哪個文件,我都想工作。
您通常有以下幾種方式:
- 將函式重寫為命令,即。一個腳本本身。一種常見的做法是保留一個
~/bin
目錄並將其包含在您的$PATH
.- 將函式導出到環境並讓另一個 shell 從那裡獲取它。請參閱我可以在 bash 中“導出”函式嗎?
- 堅持
bar
成為一個可溯源的函式,但從它那裡獲取它~/.bashrc
可能不是最好的解決方案。您可以將它放在它自己的文件中~/bin
並從那裡獲取它。這會使事情變得簡單。- 如果可能的話,以其他方式將邏輯提供給
ext_command
你的foo
函式,例如。通過here-doc。