linux - 隐藏 bash 函数内部

标签 linux bash

我的 .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/

相关文章:

c - 如何获取本地IP和MAC地址 C

regex - sed - 如何获得段落的前两句?

bash - 是否可以将错误输出发送到bash中的变量?

linux - bash 脚本在后台运行固定数量的作业

bash - 如何重复启动和终止一个永无止境的 bash 进程

linux - Linux 中进程的 CPU 争用(等待时间)

linux - AFL 模糊器程序标志

C 程序输出应转到控制台,但不应重定向

linux - postgresql:读取器进程消耗高 cpu

bash - 在 travis CI 上运行 sh 脚本 : The command exited with 1