![具有 bashrc 中定义的函数的 env 命令](https://linux22.com/image/156155/%E5%85%B7%E6%9C%89%20bashrc%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E5%87%BD%E6%95%B0%E7%9A%84%20env%20%E5%91%BD%E4%BB%A4.png)
我的 中有一个函数~/.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
我们开始吧。