我想将一个shell的所有环境变量(在我的情况下:kornshell)自动转移到另一个shell(在我的例子中:z-shell)。
如果可能的话,传输应该在zshell的启动文件中,以避免使用其他脚本,因为我想将它转移到其他服务器以达到同样的目的。
到目前为止我尝试了什么:
将$ export $(ksh -c env | tr '\n' ' ')
放在.zshrc(Zshell的启动文件)中。
这不起作用,因为命令是作为当前shell(zsh)的子代执行的,因此它具有与zsh相同的环境变量而不是kornshell的环境。
在一个额外的脚本中
#!/usr/bin/ksh
echo $(ksh -c env | tr '\n' ' ') # for testing if it works
export $(ksh -c env | tr '\n' ' ')
这也是我的工作。
任何评论都非常感谢。
答案 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' ' ')