如何解决shell执行派生子shell问题

简介:

笔者今天写了一个shell script,希望简化登录代理服务器的问题,可是script写好之后,却发现没有按照预想的情况下得到环境变量。

为了让大家好理解,贴出script的内容给各位参阅:

1
vim proxy_http.sh

加入如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
 
default_domain=cmdschool
default_username=will
 
read  -p  "Please enter you domain(default value is cmdschool): "  domain
read  -p  "Please enter your username(default value is will): "  username
read  -s -p  "Please enter your password: "  password
 
if  [ domain== ""  ];  then
   domain=$default_domain
fi
 
if  [ username== ""  ];  then
   username=$default_username
fi
 
export  http_proxy= "http://$domain\\$username:$password@10.168.2.147:8080"
export  https_proxy= "http://$domain\\$username:$password@10.168.2.147:8080"

按照平时的执行方法,我们通常是:

1
2
chmod  770 proxy_http.sh
. /proxy_http .sh

等同于以下执行效果

1
sh . /proxy_http .sh

等同于以下执行效果

1
bash  . /proxy_http .sh

然后你检查环境变量,

1
2
echo  $http_proxy
echo  $https_proxy

结果发现输出的都是空值,

于是乎一顿百度,结果发现类似的帖子也有,但帖子上也没有找到答案(帖子的问法是export如何在当前console生效),

http://bbs.chinaunix.net/thread-3777848-1-1.html

然后联系了一位开源界的前辈(我也不知道对方是否愿意我透露他的大名,在此暂时不透露),并得到对方热情指点,解决方法极其简单,

1
source  proxy_http.sh

所以,source指令和sh(bash)指令的区别显而易见,就是一个不会派生子shell和一个会派生子shell,我们平时使用source来导入环境变量,但却没有注意到source其实他的本质是用来执行脚本。O(∩_∩)O哈哈~。










本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/2045014,如需转载请自行联系原作者
目录
相关文章
|
Shell
设置shell脚本执行错误自动退出
设置shell脚本执行错误自动退出
990 0
|
Shell Go
Go 语言入门很简单:Go 语言执行 Shell 命令(下)
Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令。Go exec 命令教程展示了如何在 Golang 中执行 shell 命令和程序。
|
Ubuntu Shell Linux
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)、采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)、在脚本的路径前加上“.”或者 source(了解)原因: 前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中。第三种,也就是使用在脚本路径前加“.”或者 source 的方式,`可以使脚本内容在当前 shell 里执行,而无需打开子 shell!`这也是为什么我们每次要修改完
1821 1
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
|
Shell Linux Go
Go 语言入门很简单:Go 语言执行 Shell 命令(上)
Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令。Go exec 命令教程展示了如何在 Golang 中执行 shell 命令和程序。
|
Shell Python
Python编程:sh模块执行shell命令
Python编程:sh模块执行shell命令
132 0
Python编程:sh模块执行shell命令
|
Shell Linux 开发工具
【Linux】小而美脚本:在多台服务器同时执行 shell 命令
【Linux】小而美脚本:在多台服务器同时执行 shell 命令
426 1
|
Java 应用服务中间件 Shell
通过shell的&命令执行“./startup.sh & tail -f ../logs/catalina.out”时造成tomcat的所属的jvm关闭并且对于的服务挂掉了
通过shell的&命令执行“./startup.sh & tail -f ../logs/catalina.out”时造成tomcat的所属的jvm关闭并且对于的服务挂掉了
276 0
通过shell的&命令执行“./startup.sh & tail -f ../logs/catalina.out”时造成tomcat的所属的jvm关闭并且对于的服务挂掉了
|
Shell
【shell】基础理论、脚本构成、脚本执行
文章目录 前言 一、定义 二、规范
169 0
【shell】基础理论、脚本构成、脚本执行
|
Ubuntu Shell Linux
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
|
Shell Python
Python编程:sh模块执行shell命令
Python编程:sh模块执行shell命令
213 0
Python编程:sh模块执行shell命令