2012-01-09 59 views
2

我想将一个外壳的所有环境变量(在本例中为:kornshell)自动传输到另一个外壳(在我的情况下是:z-shell)。自动将所有环境变量从一个外壳转移到另一个外壳

如果可能,传输应该位于zshell的启动文件中,以避免使用其他脚本,因为我想将其传输到其他服务器以实现相同目的。

我试过到目前为止:

  1. $ export $(ksh -c env | tr '\n' ' ')在.zshrc(该Zshell的Startupfile)。

    这不起作用,因为该命令是作为当前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' ' ') 
    

    这doent的作品无论是。

任何意见,非常感谢。

+0

缩进和编号列表不很好地一起玩。尝试使用'1)编号等等。 – 2012-01-09 13:13:55

+0

谢谢你,这个诀窍:) – Cassandra 2012-01-09 13:25:44

+1

@larsmans:是的,他们这样做。无论列表中的任何内容都需要缩进4以上,否则将需要空格。这是8逐字。 – 2012-01-09 14:04:40

回答

1

在一个空的环境中运行ksh

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

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

+0

嘿乔治。 不知道如何可以帮助解决环境问题。我已经尝试了所有这些,虽然我不确定概念上的差异。它没有任何区别。你有没有尝试在你的shell如果env。变量是那些其他shell? 问题是父进程shell将其env变量传递给任何子进程,无论如何调用(?)。 – Cassandra 2012-01-09 14:07:38

+0

来源。 (点命令) 该命令从命令行调用时执行脚本。在脚本中,源文件名将加载文件文件名。源文件(点命令)将代码导入脚本,附加到脚本(与C程序中的#include指令效果相同)。最终结果与“源代码”代码行出现在脚本主体中的结果相同。这在多个脚本使用通用数据文件或函数库的情况下非常有用。 http://tldp.org/LDP/abs/html/internal.html#BUILTINREF – George 2012-01-11 03:31:14

+0

啊,有意思,谢谢。在命令行中,我使用了./myscript.sh和。或源myscript.sh作为迄今为止的同义词。 – Cassandra 2012-01-12 14:13:26

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

不适合我,因为 “ENV” 返回的文字,如:

key1=value1 value2 
... 

所以上面的命令将扩展$(KSH -c ENV | TR '\ n''“)和run :

export key1=value1 value2 

但这生成错误:

export: value2: is not an identifier 

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

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

export -p > myenv.sh 

这个输出Bash中

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

看来,打击 “申报-x” 是一样的 “出口”。 但在KSH“出口-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 
+0

export $(ksh -c env | tr'\ n''') 确实推出了 export key1 = value1 export key2 = value2 所以这在我的情况中不是问题。但很高兴你也解决了你的问题:) – Cassandra 2012-07-27 14:10:57

+0

@Cassandra:你写道:“export key1 = value1 export key2 = value2”,但是如果key1的值包含空格或其他特殊字符?在这种情况下,“export $(ksh -c env | tr'\ n''')”在您的环境中打印了什么? – jhnlmn 2012-09-28 00:58:55

+0

嘿jhnlmn,在我的情况下没有特殊字符。它看起来像上面描述的那样: export key1 = value1 export key2 = value2 我的问题是通过首先取消设置环境来解决的(正如您所做的那样)。 – Cassandra 2012-10-01 09:41:52