天天看點

如何解決shell執行派生子shell問題

筆者今天寫了一個shell script,希望簡化登入代理伺服器的問題,可是script寫好之後,卻發現沒有按照預想的情況下得到環境變量。

為了讓大家好了解,貼出script的内容給各位參閱:

1

<code>vim proxy_http.sh</code>

加入如下配置:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>#!/bin/bash</code>

<code>default_domain=cmdschool</code>

<code>default_username=will</code>

<code>read</code> <code>-p </code><code>"Please enter you domain(default value is cmdschool): "</code> <code>domain</code>

<code>read</code> <code>-p </code><code>"Please enter your username(default value is will): "</code> <code>username</code>

<code>read</code> <code>-s -p </code><code>"Please enter your password: "</code> <code>password</code>

<code>if</code> <code>[ domain==</code><code>""</code> <code>]; </code><code>then</code>

<code>  </code><code>domain=$default_domain</code>

<code>fi</code>

<code>if</code> <code>[ username==</code><code>""</code> <code>]; </code><code>then</code>

<code>  </code><code>username=$default_username</code>

<code>export</code> <code>http_proxy=</code><code>"http://$domain\\$username:[email protected]:8080"</code>

<code>export</code> <code>https_proxy=</code><code>"http://$domain\\$username:[email protected]:8080"</code>

按照平時的執行方法,我們通常是:

<code>chmod</code> <code>770 proxy_http.sh</code>

<code>.</code><code>/proxy_http</code><code>.sh</code>

等同于以下執行效果

<code>sh .</code><code>/proxy_http</code><code>.sh</code>

<code>bash</code> <code>.</code><code>/proxy_http</code><code>.sh</code>

然後你檢查環境變量,

<code>echo</code> <code>$http_proxy</code>

<code>echo</code> <code>$https_proxy</code>

結果發現輸出的都是空值,

于是乎一頓百度,結果發現類似的文章也有,但文章上也沒有找到答案(文章的問法是export如何在目前console生效),

<a href="http://bbs.chinaunix.net/thread-3777848-1-1.html">http://bbs.chinaunix.net/thread-3777848-1-1.html</a>

然後聯系了一位開源界的前輩(我也不知道對方是否願意我透露他的大名,在此暫時不透露),并得到對方熱情指點,解決方法極其簡單,

<code>source</code> <code>proxy_http.sh</code>

是以,source指令和sh(bash)指令的差別顯而易見,就是一個不會派生子shell和一個會派生子shell,我們平時使用source來導入環境變量,但卻沒有注意到source其實他的本質是用來執行腳本。O(∩_∩)O哈哈~。

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/2045014,如需轉載請自行聯系原作者