筆者今天寫了一個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,如需轉載請自行聯系原作者