自动将所有环境变量从一个shell传输到另一个shell

时间:2012-01-09 13:05:19

标签: linux bash shell ksh zsh

我想将一个shell的所有环境变量(在我的情况下:kornshell)自动转移到另一个shell(在我的例子中:z-shell)。

如果可能的话,传输应该在zshell的启动文件中,以避免使用其他脚本,因为我想将它转移到其他服务器以达到同样的目的。

到目前为止我尝试了什么:

  1. $ export $(ksh -c env | tr '\n' ' ')放在.zshrc(Zshell的启动文件)中。

    这不起作用,因为命令是作为当前shell(zsh)的子代执行的,因此它具有与zsh相同的环境变量而不是kornshell的环境。

  2. 在一个额外的脚本中

    #!/usr/bin/ksh
    echo $(ksh -c env | tr '\n' ' ') # for testing if it works
    export $(ksh -c env | tr '\n' ' ')
    

    这也是我的工作。

  3. 任何评论都非常感谢。

3 个答案:

答案 0 :(得分:4)

export $(ksh -c env | tr '\n' ' ')

对我不起作用,因为“env”会返回如下文字:

key1=value1 value2
...

所以上面的命令会扩展$(ksh -c env | tr'\ n''')并运行:

export key1=value1 value2

但这会产生错误:

export: value2: is not an identifier

请注意,“env”输出中“=”符号右侧可能有其他不良字符,这会产生错误。

但是有一种更好的出口环境方式:

 export -p > myenv.sh

这个输出在Bash

 declare -x key1="value1 value2"
 ....

看来Bash“declare -x”与“export”相同。 但在ksh“export -p”中打印

export key1='value1 value2'
...

现在我只需要运行

source myenv.sh 

导出所有变量

但是我还需要在导出new之前删除所有现有变量。 我找到了解决方案: http://www.linuxquestions.org/questions/linux-newbie-8/how-to-unset-environment-variable-in-bash-383066/

所以,我的最终代码是:

unset `env | awk -F= '/^\w/ {print $1}' | xargs`
source myenv.sh

答案 1 :(得分:1)

如何使用。 /path/to/your/shell/script.sh来运行你的脚本。 您可以通过三种不同的方式运行shell脚本, 1)/bin/sh /path/to/your/shell/script.sh 2)/path/to/your/shell/script.sh 3). /path/to/your/shell/script.sh 你可以看一下。

答案 2 :(得分:1)

在空白环境中运行ksh

export $(env -i ksh -c env | tr '\n' ' ')