bashrcで定義された関数を含むenvコマンド

bashrcで定義された関数を含むenvコマンド

私の機能があります~/.bashrc

foo () { echo $FOO }

これで、次のように動作します。

$ source ~/.bashrc
$ setenv FOO "yes"
$ foo
yes

しかし、そうではありません:

$ env FOO="no" foo
foo: no such file or directory

GNU bash、バージョン 4.2.46(2)-リリース(x86_64-redhat-linux-gnu)

答え1

だからあなたはこれを持っています:

$ foo() { echo "$FOO"; }
$ FOO=bar foo
bar

だから:

$ env FOO=bar foo
env: foo: No such file or directory

envコマンドはどこで見つけることができますか?info man氏名:

文字「=」を含まない最初のオペランドは、呼び出すプログラムを指定し、「PATH」環境変数に対して検索されます。

よく。まあ、fooそれはbash関数なので、bashを呼び出すとどうなりますか?

$ env FOO=bar bash -c foo
bash: foo: command not found

ああ、待ってください。関数を ~/.bashrc で定義しました。6.2 Bash 起動ファイルBashのマニュアルでは、シェルが.bashrcを次のようにソースとして提供していることがわかります。インタラクティブシェル:

$ env FOO=bar bash -ic foo
bar

始めましょう。

関連情報