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