2012-01-09 28 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