在bash中将环境变量和函数作为可执行命令打印出来

3
在bash中,如果您在终端中运行alias,它会像这样打印出一系列已定义的别名作为命令:
alias foo=bar

如果你愿意的话,你可以使用alias > my_aliases.sh,然后使用source my_aliases.sh。但我需要的是同样的功能,但是针对环境变量和已定义的函数。
看起来env可能行得通,但它并不完全有效。我需要输出环境变量和函数,但在env的输出中,我看到了像这样的行:
BASH_FUNC_foo()=() {  ls foo 
}

foo 是我的函数的实际名称,但我无法将 env 的输出添加到文件中并 source 它。如果这样做,脚本会出现以下错误:

bash: test.sh: line 8: `BASH_FUNC_pkgs()=() {  pkg ls "$@"'

也许有一种方法可以仅打印环境变量,然后以某种其他可执行的方式打印导出函数吗?如有建议,敬请指教。
2个回答

5
  • declare -p will print all variables in a reuseable format, including export/integer/readonly/etc. attributes.

    declare -x USER="jkugelman"
    declare -x USERNAME="jkugelman"
    declare -x VISUAL="vim"
    
  • declare -fp will print all functions in a reuseable format.

    reload () 
    { 
        history -a;
        exec bash -l
    }
    
  • If you don't care about attributes a bare declare will print both variables and functions.


1

注意,这比约翰的答案更糟糕,因为变量的范围没有“声明”。 - glenn jackman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接