我的.bashrc
文件导出一个名为的函数lookup
:
lookup() {
grep -r -ne "$1" * | grep -v "TAGS:" | grep -v "tags:"
}
export -f lookup
我可以在 shell 中使用该函数。但如果我将其放入如下脚本中:
#!/bin/bash
lookup "foo"
并运行脚本,然后 bash 报告“命令未找到” lookup
。这在以前是可以工作的。我强烈怀疑在我的系统上对 bash 进行安全更新后,它就停止工作了(可能与 shellshock/bashdoor 有关?)我的 bash 版本是 openSUSE 11.4 上的 4.1.10(1)
答案1
查看http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
非交互方式调用
当 Bash 以非交互方式启动时,例如,要运行 shell 脚本,它会在环境中查找变量 BASH_ENV,如果出现则扩展其值,并使用扩展的值作为要读取和执行的文件的名称。
具体来说,~/.bashrc、~/.profile、~/.bash_profile 都不是来源。仅当 shell 是交互式 shell 时,才会调用 ~/.bashrc。
您有以下几种选择:
明确地获取你的 .bashrc
#!/bin/bash . ~/.bashrc lookup "foo"
使用交互标志启动 bash
#!/bin/bash -i lookup "foo"
启动脚本时设置 BASH_ENV 变量:
BASH_ENV=$HOME/.bashrc /path/to/my/script