Bash

如何讓外部程序知道我的 bash 函式

  • November 21, 2018

我有 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無論它來自哪個文件,我都想工作。

您通常有以下幾種方式:

  1. 將函式重寫為命令,即。一個腳本本身。一種常見的做法是保留一個~/bin目錄並將其包含在您的$PATH.
  2. 將函式導出到環境並讓另一個 shell 從那裡獲取它。請參閱我可以在 bash 中“導出”函式嗎?
  3. 堅持bar成為一個可溯源的函式,但從它那裡獲取它~/.bashrc可能不是最好的解決方案。您可以將它放在它自己的文件中~/bin並從那裡獲取它。這會使事情變得簡單。
  4. 如果可能的話,以其他方式將邏輯提供給ext_command你的foo函式,例如。通過here-doc。

引用自:https://unix.stackexchange.com/questions/483152