博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决shell执行派生子shell问题
阅读量:5880 次
发布时间:2019-06-19

本文共 1222 字,大约阅读时间需要 4 分钟。

笔者今天写了一个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生效),

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

1
source 
proxy_http.sh

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

本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/2045014,如需转载请自行联系原作者
你可能感兴趣的文章
Linux学习笔记(十二)--命令学习(用户创建、删除等)
查看>>
DOCKER windows 7 详细安装教程
查看>>
养眼美女绿色壁纸
查看>>
U盘启动盘制作工具箱 v1.0
查看>>
增强myEclipse的提示功能
查看>>
Zabbix汉化方法
查看>>
Java I/O系统基础知识
查看>>
Java多线程设计模式(2)生产者与消费者模式
查看>>
基于whoosh的flask全文搜索插件flask-msearch
查看>>
对象并不一定都是在堆上分配内存的
查看>>
刘宇凡:罗永浩的锤子情怀只能拿去喂狗
查看>>
php晚了8小时 PHP5中的时间相差8小时的解决办法
查看>>
JS(JavaScript)的初了解7(更新中···)
查看>>
svn文件管理器的使用
查看>>
Ansible playbook 使用
查看>>
for/foreach/linq执行效率测试
查看>>
js /jquery停止事件冒泡和阻止浏览器默认事件
查看>>
杭电1698--Just a Hook(线段树, 区间更新)
查看>>
长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order
查看>>
好作品地址
查看>>