我的 .bashrc 看起来像这样......
export PERL5LIB="/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0/${PLAT}-thread-multi"
export PERL5LIB="${PERL5LIB}:/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0"
function dev {
export PERL5LIB="/dev/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0/${PLAT}-thread-multi"
export PERL5LIB="${PERL5LIB}:/dev/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0"
}
问题是,当我对 PERL5LIB 进行 grep 时,会看到所有内容。
> env | grep PERL
PERL5LIB=/tools/perl/Linux/x86_64/lib/perl5/5.10.0/x86_64-thread-multi:/tools/perl/Linux/x86_64/lib/perl5/5.10.0
export PERL5LIB="/dev/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0/${PLAT}-thread-multi";
export PERL5LIB="${PERL5LIB}:/dev/tools/perl/Linux/${PLAT}/lib/perl5/5.10.0";
所以它正在获取我的“开发”函数中的内容。有没有办法隐藏函数的内容?还是我只需要习惯 getenv.. 旧习惯很难打破..
最佳答案
在您的 bash 提示符下运行 type env
,并提供输出;对我来说,这表明 env 是 /usr/bin/env
,一个单独的可执行文件;此类可执行文件无法了解有关函数或非导出变量的任何信息。
也就是说,没有解决根本问题(可能的原因是使用 bash 内置函数或别名代替 /usr/bin/env
,该类型的输出命令将显示),有一个可用的解决方法:env | grep '^PERL'
;插入符将仅发出以 PERL
开头的行(与行中任何位置的 PERL
相对),并且函数内容在 set
的输出中缩进(它似乎代替 env
运行;同样,type env
应该给出原因的线索)。
澄清一点:set
是一个 bash 内置函数,当它在没有参数的情况下运行时,会转储定义的变量(环境或其他)和函数;当使用 参数运行时,它有一些其他的、完全不同的(和 POSIX 指定的)行为。 env
作为外部程序,无法访问未导出的变量或调用它的 shell 中定义的函数。
(set 实际上不是特定于 bash 的,而是 specified by POSIX 来转储所有 shell 变量;据我所知,它转储函数定义的附加功能是超出标准字面意义的扩展)。
关于linux - 隐藏 bash 函数内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387551/