|
藍森林 http://www.lslnet.com 2006年6月26日 11:18
請教關於設置環境變量
小弟請教達人,如何使一個教本中設置的環境變量export出來,在不使用source的情況下。
如tmp.sh:
[code]
#!/bin/sh
export IP=192.168.0.152
[/code]
如果我直接執行這個教本,那麼這個環境變量IP在腳本退出後是不能使用的,用source執行tmp.sh可以解決問題,但是除了使用source,別的還有什麼辦法麼?我的環境下沒有source命令。
謝謝!~~:em02::em02: |
. test.sh
exec test.sh |
謝謝樓上的朋友,但是也沒有exec命令。還請大家幫忙。 |
. ./tmp.sh |
試過了,沒有問題,謝謝大家,謝謝版主大哥。 |
版主老大,又有問題了,我用[code]man .[/code] 查了一下,[code]. ./tmp.sh 相當於 source tmp.sh[/code]但是我發現這兩個好像不完全一樣。在這樣的腳本中,兩者會產生不同的效果:
[code]
#!/bin/sh
echo '#!/bin/sh' > 1.sh
echo export _IP=123 >> 1.sh
chmod +x 1.sh
. 1.sh
[/code]
[code]
#!/bin/sh
echo '#!/bin/sh' > 1.sh
echo export _IP=123 >> 1.sh
chmod +x 1.sh
source 1.sh
[/code]
第一個腳本執行完退出後,執行echo $_IP; 沒有內容,而第二個腳本可以輸出123。請問這是為什麼,在沒有source和exec的環境下,怎麼實現第二個腳本的功能呢?謝謝大家了。 |
請提供你的測試環境 |
我的測試環境是redhat9.0,謝謝版主。 |
呵呵
你的shell版本
這裡不是redhat熱線 |
哈哈,不好意思,版主。我的shell版本:
GUN bash, version 2.05b.0(1)-release (i386-redhat-linux-gun)
順便說一句,如果實在是沒有辦法了,是不是我可以寫一個小的程序,開個子進程,然後將子進程的父進程改為init進程,然後再在子進程裡用setenv設置環境變量就OK了?是不是有點麻煩。。。 |
[code]
-bash-2.05b# cat t.sh
#!/bin/sh
echo '#!/bin/sh' > 1.sh
echo export _IP=123 >> 1.sh
chmod +x 1.sh
. 1.sh
-bash-2.05b# . ./t.sh&&echo $_IP&&unset _IP
123
-bash-2.05b# source ./t.sh&&echo $_IP&&unset _IP
123
-bash-2.05b# sed -i '$s/^\./source/' t.sh
-bash-2.05b# cat t.sh
#!/bin/sh
echo '#!/bin/sh' > 1.sh
echo export _IP=123 >> 1.sh
chmod +x 1.sh
source 1.sh
-bash-2.05b# . ./t.sh&&echo $_IP&&unset _IP
123
-bash-2.05b# source ./t.sh&&echo $_IP&&unset _IP
123
-bash-2.05b# cat /etc/redhat-release
Red Hat Linux release 9 (Shrike)
-bash-2.05b#
[/code]
好像和你所述也不一致
|
哦,我在試一下,看看。 |
版主大哥,怪小弟昨天沒有看清楚你寫的代碼,而且我們兩個的測試方法也不太相同,我的環境下不是直接在命令行下輸入[code]. ./t.sh[/code]而是在程序裡邊通過system調用[code]system(". ./t.sh");[/code]在這樣的測試環境下,問題還是沒有解決,先謝謝了。 |
這個是不是不可能做到啊。 |
如果可以的話那可以用一個程序隨時去改變其它進程的環境了
多數人不會接受這種設計的系統吧? |
呵呵,說的也是。
謝謝。。 |
| |