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

发布于 2024-12-25 14:15:07 字数 530 浏览 1 评论 0原文

我想自动将一个 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' ' ') # 用于测试它是否有效
    导出 $(ksh -c env | tr '\n' ' ')
    

    这也不起作用。

任何评论都将受到高度赞赏。

I want to transfer all environment variables of the one shell (in my case: kornshell) to another shell (in my case: the z-shell) automatically.

If possible, the transfer should be in the startup file of the zshell to aviod the use of additional scripts as I want to transfer it to other servers for the same purpose.

What I tried so far:

  1. put $ export $(ksh -c env | tr '\n' ' ') in the .zshrc (Startupfile of the Zshell).

    This was not working because the command is executed as a child of the current shell (zsh) which consequently has the same environment variables as the zsh and NOT the environment of the kornshell.

  2. in an extra script

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

    This doent's work either.

Any comments are highly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吾性傲以野 2025-01-01 14:15:07
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
export $(ksh -c env | tr '\n' ' ')

does not work for me because "env" returns text like:

key1=value1 value2
...

So the above command will expand $(ksh -c env | tr '\n' ' ') and run:

export key1=value1 value2

But this generates error:

export: value2: is not an identifier

Note that there may be other bad characters on the right side of "=" sign in the output of "env", which will produce errors.

But there is a better way to export environment:

 export -p > myenv.sh

this outputs in Bash

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

It appears that Bash "declare -x" is the same as "export".
But in ksh "export -p" prints

export key1='value1 value2'
...

Now I just need to run

source myenv.sh 

to export all variables

But I also need to delete all existing variables before exporting new.
I found solution at:
http://www.linuxquestions.org/questions/linux-newbie-8/how-to-unset-environment-variable-in-bash-383066/

So, my final code is:

unset `env | awk -F= '/^\w/ {print $1}' | xargs`
source myenv.sh
御守 2025-01-01 14:15:07

在空环境中运行 ksh

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

Run your ksh in an empty environment:

export $(env -i ksh -c env | tr '\n' ' ')
病女 2025-01-01 14:15:07

怎么样使用 . /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
你可以检查一下。

How about using . /path/to/your/shell/script.sh to run your script.
You can run a shell script by three different means,
1) /bin/sh /path/to/your/shell/script.sh
2) /path/to/your/shell/script.sh
3) . /path/to/your/shell/script.sh
You can check it out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文