在bash中将环境变量和功能打印为可执行命令

时间:2018-10-17 20:21:16

标签: bash

在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 个答案:

答案 0 :(得分:6)

  • declare -p将以可重用的格式打印所有变量,包括export / integer / readonly / etc。属性。

    declare -x USER="jkugelman"
    declare -x USERNAME="jkugelman"
    declare -x VISUAL="vim"
    
  • declare -fp将以可重用的格式打印所有功能。

    reload () 
    { 
        history -a;
        exec bash -l
    }
    
  • 如果您不关心属性,则裸declare会同时打印变量和函数。

答案 1 :(得分:1)

使用不带任何参数的set命令

set > variables_and_functions.bash

参考4.3.1 The Set Builtin