Cas*_*dra 3 linux bash shell ksh zsh
我想将一个 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' ' ')
Run Code Online (Sandbox Code Playgroud)
这也不行。
任何评论都非常感谢。
export $(ksh -c env | tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)
对我不起作用,因为“env”返回如下文本:
key1=value1 value2
...
Run Code Online (Sandbox Code Playgroud)
所以上面的命令将展开 $(ksh -c env | tr '\n' ' ') 并运行:
export key1=value1 value2
Run Code Online (Sandbox Code Playgroud)
但这会产生错误:
export: value2: is not an identifier
Run Code Online (Sandbox Code Playgroud)
注意“env”的输出中“=”符号右侧可能还有其他坏字符,会产生错误。
但是有一个更好的方法来导出环境:
export -p > myenv.sh
Run Code Online (Sandbox Code Playgroud)
这在 Bash 中输出
declare -x key1="value1 value2"
....
Run Code Online (Sandbox Code Playgroud)
Bash“declare -x”似乎与“export”相同。但是在 ksh "export -p" 打印
export key1='value1 value2'
...
Run Code Online (Sandbox Code Playgroud)
现在我只需要运行
source myenv.sh
Run Code Online (Sandbox Code Playgroud)
导出所有变量
但我还需要在导出新变量之前删除所有现有变量。我在以下位置找到了解决方案: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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4146 次 |
| 最近记录: |