具有 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)-release (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 手册中,我们看到 shell 将您的 .bashrc 来源为交互的贝壳:

$ env FOO=bar bash -ic foo
bar

我们开始吧。

相关内容