gpt4 book ai didi

linux - 自动将所有环境变量从一个 shell 转移到另一个 shell

转载 作者:太空狗 更新时间:2023-10-29 11:34:05 24 4
gpt4 key购买 nike

我想自动将一个 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' ' ')

    这也是该项目的工作。

非常感谢任何评论。

最佳答案

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 

导出所有变量

但我还需要在导出新变量之前删除所有现有变量。我在以下位置找到了解决方案: 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

关于linux - 自动将所有环境变量从一个 shell 转移到另一个 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com