肥宅钓鱼网
当前位置: 首页 钓鱼百科

在Shell脚本中$?用于(解决shell脚本中34)

时间:2023-07-03 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

背景最近在通过shell脚本在Linux系统安装Java或Python的过程中,遇到了shell脚本中的“source/etc/profile”无法生效的问题,虽然也可以在执行完脚本后再次执行“source/etc/profile”来使配置文件生效,但未免有些繁琐,而我又比较懒,想彻底弄清其原因及解决办法,从而一劳永逸。所以,当脚本执行完成,回到shell命令行,原子shell脚本中执行的source命令也就不生效。

背景


最近在通过shell脚本在Linux系统安装Java或Python的过程中,遇到了shell脚本中的“source /etc/profile”无法生效的问题,虽然也可以在执行完脚本后再次执行“source /etc/profile”来使配置文件生效,但未免有些繁琐,而我又比较懒,想彻底弄清其原因及解决办法,从而一劳永逸。以下为本次解决问题的实践记录:

1.示例

如下图所示,在python_install.sh脚本中,在安装完Python3、配置完环境变量后,使用source /etc/profile 命令来重新加载配置文件,并更改Python的安装镜像源。但通过./python_install.sh执行脚本完成后,在命令行输入:python3,仍然提示“-bash: python3: command not found”(表示重新加载配置文件未生效,系统无法识别到python3命令)

2.原因

执行脚本时,脚本中的命令是在子shell中执行,子shell只能继承父shell的环境变量,而无法修改父shell的环境变量,所做的修改仅对当前子shell有效。所以,当脚本执行完成,回到shell命令行,原子shell脚本中执行的source命令也就不生效。

3.解决办法

方法一:

# 也就是上述提到的繁琐的方法./python_install.sh #(或sh python_install.sh)source /etc/profile

方法二(本文主要想表达的方法):

# 通过source方式执行脚本source python_install.sh#(或. python_install.sh注意点后面有空格)

4.shell中"."、"source"、"sh"、"./"的区别

命令

作用

作用域

source,等价于.(点)

用于使shell读取指定的shell文件,并依次执行文件中的所有语句

作用于当前shell进程

sh

执行指定shell脚本,在子shell中执行脚本中的语句

创建一个子shell,在新的namespace中执行此脚本,继承父shell环境变量,但不改变父shell环境变量,仅对当前子shell有效

./

执行当前脚本文件,前提是待执行的文件具有可执行属性,等价于sh

创建一个子shell,在新的namespace中执行此脚本,继承父shell环境变量,但不改变父shell环境变量,仅对当前子shell有效

5.其他注意事项

若shell脚本中使用了source命令,则需要使用bash(或source)来执行,因为sh和bash是不同的shell,source命令是bash shell的内置命令,从C Shell 而来,而sh中没有source命令,所以用sh或者./运行的时候,会开启一个子shell进程,子shell进程继承了父shell(无source命令)的特性,所以会报错“source: not found”。

6.卸载python3,再次使用脚本进行安装

rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps# 卸载python3whereis python3 |xargs rm -frv# 删除python3所有残余文件,注意是卸载Python3,千万要带3,否则会把系统自带的Python2和yum(依赖Python2)也卸载了whereis python3# 查看是否存在python3python3 # 进入python解释器环境,若提示“-bash: python3: command not found”则说明卸载成功

再次执行shell脚本,一键安装python

source python_install.sh

安装成功后如下图所示:

验证一下python3是否安装成功,以及脚本最后更改的pip镜像源是否生效:

从上图可以看出,python3安装成功,python镜像源已成功替换为阿里云镜像源。

小结


以上就是shell脚本中“source /etc/profile”无法生效的原因及解决办法,以及shell中"."、"source"、"sh"、"./"的区别,只要脚本中使用了“source /etc/profile”,就可以使用:source xxx.sh(脚本文件名称)来执行脚本,从而自动重新加载配置文件。

    推荐阅读
  • 产妇饮食食谱(需要注意什么)

    接下来我们就一起去研究一下吧!产妇饮食食谱产后1~3天,肉丝挂面汤。早点:蒸蛋羹,牛奶50克,橘子50克。产后3~30天,面包。产妇每天所需食物及推荐量主食:可吃大米、面粉、小米、玉米面、杂粮450克。动物性食品:禽类(鸡、鸭)、肉类、动物内脏200克。烹调用油:可用豆油、花生油、香油等20克。牛奶或豆浆:250克。

  • 酒醉伤感的句子说说心情(比较伤感的句子)

    酒醉伤感的句子说说心情喝醉了,心不醉。没喝酒,心老了。我再次满上我的惆怅,把最近的烦恼最近的不快都一饮而尽!第一次报复人,我尝到了滋味,像喝酒似的。刚一喝,芬芳甘醇,过后却满嘴苦涩。但确实不喜欢喝酒,反胃。只是贪恋那一刻“不清醒”。对不起,我不会喝酒,我只会做梦。日暮酒醒人已远,满天风雨下西楼。劝你别喝酒的男孩很多,可是你喝醉照顾你的有吗?艰难苦恨繁霜鬓,潦倒新停浊酒杯。

  • 猪大肠要怎样做好吃(猪大肠的家常做法)

    2把猪大肠装入碗中,放入蛋黄,拌匀,放入生粉,拌匀。3热锅注油,烧至五成热,放入猪大肠。5把炸好的猪肠捞出,沥干油,备用。7倒入炸好的猪肠,淋入料酒、生抽,炒匀去腥。10加入孜然粉,炒匀炒香。美食常识猪肠含有蛋白质、碳水化合物、脂肪、核黄素、烟酸、镁、钙、铁等营养成分,具有润燥、补虚、止渴止血、增强免疫力等功效。制作小贴士炸猪肠的时间可以稍微久一点,把里面的肥油炸出来,口感会更好。

  • 一个木一个角读什么(一个木一个角到底读什么)

    一个木一个角读什么?以下内容希望对你有帮助!部首:木,笔画:11,五行:木,繁体:桷,五笔:SQEH。

  • 月季扦插黑杆补救(月季扦插黑杆补救方法)

    接下来我们就一起去了解一下吧!月季扦插黑杆补救首先需要对栽培月季的土壤进行消毒杀菌,而且在第一次浇水的时候,使用一些杀菌剂。其次在月季扦插没有生根之前,保持它的土壤稍微潮湿即可,不宜水分过大。最后需要将扦插的月季放在通风比较好的地方,这样就可以对黑杆的月季进行补救。

  • 煮西米露牛奶的步骤(家庭自制西米露牛奶方法分享)

    准备一口深一点的锅,倒入1000ml的水,没有量杯的话可以用矿泉水瓶代替哦,把水烧开。水烧开后不要关火,转小火,加入100g西米,用勺子轻轻搅拌防止结块粘锅。这时候会看到西米中心还有一点白心在,开小火继续煮五分钟,注意搅拌。重复上面步骤,五分钟后关火焖,再过五分钟就可以打开锅盖,这时西米已经完全熟透,颗颗晶莹剔透。倒掉沸水,立即把西米浸泡在冷水中冷却,后用细筛子筛出西米,放于碗中。

  • 权健束昱辉是哪里人(权健大老板束昱辉为什么改名字)

    束昱辉者,原名束必和也。“日”与“立”联合起来表示“新日登位”。原来,束昱辉的心,蛮大呀,要像太阳一样遍洒光辉。别说是神医了,束昱辉除了有钱,连普通医师的执业证书都没有,怎么可能亲自治病救人、救死扶伤?据说,束昱辉的口头禅,是6个字:要做事,先造势。将束必和改名为:束昱辉,并来一个翻天覆地的包装,也是一种天价营销之道吧?

  • 无线网卡安装一直初始化怎么回事(无线网卡无法启动)

    接下来我们就一起去研究一下吧!无线网卡安装一直初始化怎么回事前言无线网卡突然无法启动,代码10,怎么办?本文记述了作者遇到这个问题的经历和最终解决方法,希望我的分享能给大家节约宝贵的时间。后来回想到之前也多次遇到这个问题,遂否定了跟虚拟机有关的判断。

  • 大漠孤烟直的下一句(大漠孤烟直原诗及翻译)

    大漠孤烟直的下一句“大漠孤烟直”下句是“长河落日圆”。出自唐代著名诗人王维于737年奉命赴边疆慰问将士途中所做的一首纪行诗《使至塞上》。征蓬出汉塞,归雁入胡天。大漠孤烟直,长河落日圆。千里飞蓬也飘出汉塞,北归大雁正翱翔云天。浩瀚沙漠中孤烟直上,无尽黄河上落日浑圆。到萧关遇到侦候骑士,告诉我都护已在燕然。

  • 金立最早推出的几款手机(国产手机发展史)

    但金正的好日子并不长,由于供应商涉及走私,刘立荣被监视居住,反复审查半年后才摆脱干系。与此同时,杨明贵移民加拿大,刘立荣的金正生涯也宣告结束。2002年9月16日,金立通信设备有限公司成立。同时凭借剧情片《大块头有大智慧》获得香港金像奖影帝。热烈庆祝金立语音王销量突破百万台!2007年月4月,金立与刘德华续约,再次邀请刘德华出任金立形象代言人。