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

在bash中将环境变量和函数打印为可执行命令,bash,Bash,在bash中,如果在终端中运行alias,它会将定义的别名列表打印为命令,如下所示: alias foo=bar bash: test.sh: line 8: `BASH_FUNC_pkgs()=() { pkg ls "$@"' 如果愿意,可以alias>my_alias.sh然后source my_alias.sh。除了环境变量和定义的函数之外,我也想要同样的东西 env看起来可能有用,但这不太管用。我需要它来输出环境变量和函数,但我在env的输出中看到类似的行: BASH_FUNC_

在bash中,如果在终端中运行
alias
,它会将定义的别名列表打印为命令,如下所示:

alias foo=bar
bash: test.sh: line 8: `BASH_FUNC_pkgs()=() {  pkg ls "$@"'
如果愿意,可以
alias>my_alias.sh
然后
source my_alias.sh
。除了环境变量和定义的函数之外,我也想要同样的东西

env
看起来可能有用,但这不太管用。我需要它来输出环境变量和函数,但我在
env
的输出中看到类似的行:

BASH_FUNC_foo()=() {  ls foo 
}
foo
是我函数的实际名称,但我不能将
env
的输出添加到文件中,也不能将其添加到
source
中。如果我这样做,脚本将出现如下错误:

alias foo=bar
bash: test.sh: line 8: `BASH_FUNC_pkgs()=() {  pkg ls "$@"'
是否有一种方法可以只打印环境变量,然后以执行友好的其他方式打印导出的函数?任何建议都将不胜感激。

  • 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
    }
    
  • 如果您不关心属性,则裸
    声明将同时打印变量和函数


使用不带参数的
set
命令

set > variables_and_functions.bash

Ref

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