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

在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、按种水:翡翠按种水可分为玻璃种、水种、冰种、糯种、冰种等;2、按颜色:翡翠按颜色可分为绿翡翠、黄翡翠、紫罗兰翡翠、墨翠、红翡翠、白翡翠等;3、按产出环:翡翠按产出环境可分为新坑翡翠和老坑翡翠。

  • 爱车开走前有必要四周检查一遍(爱车陷入险境时)

    请第yi时间下车撤离至安全地段,并拨打吉利汽车售后服务24小时救援热线400-886-9888联系救援。路况允许情况下,可通过适当左右打方向降低打滑风险。若剩余燃油不足以行驶至加油站,可将车辆停放至安全区域,联系救援。为避免燃油用尽,应在每次行驶前关注剩余燃油量。若轮胎轻微损坏,可前往就近服务站对车辆轮胎进行专业检测;若轮胎损坏严重,切勿继续行驶,请拨打吉利汽车售后服务24小时救援热线安排道路救援。

  • 本来我可以坚持作文600字(关于本来我可以坚持作文600字)

    本来我可以坚持作文600字题目:《本来我可以坚持》范文全文:直到现在,仍有一件一直让我后悔的事情。记得三年级的时候,我第一次看见柳琴。那时,我就暗暗下定决心要学柳琴。在学习柳琴的过程中,刚开始还觉得很有趣,但学到后面就觉得越来越无趣,因为重复。当时,爸爸妈妈知道我的想法后,一直苦口婆心地劝我别放弃,后来老师也知道了,也一直鼓励我坚持学柳琴。如果当初没有放弃的话,也许现在柳琴就是我的一技之长了。

  • 真实的抗日战争片子(直到第十次看完我的团长我的团)

    最近第十次《我的团长我的团》。何况孟烦了还是出身于书香门第之家,是绝不允许与风尘女子交往的。对于师长决心要把南天门攻下的紧急时分,团长与孟烦了两人神秘地摸进了南天门。理性客观地面对问题,让他们登上南天门有了希望。在面对师长下属的侮辱与惨打,孟烦了的父亲放下了书生的气概,还有小醉也出来救孟烦了。在南天门死守中,那位小醉同乡的连长自杀了。但幸于存活下来,对于团长、迷龙是庆幸的。

  • 家常炒辣子鸡块的做法(炒辣子鸡的做法步骤)

    家常炒辣子鸡块的做法材料:鸡块450克,熟白芝麻少许,干红辣椒10个,花椒50粒,青椒一个,葱10克,姜10克蒜10克,盐5克,白糖5克,料酒5克,醋5克,生抽10克。将洗净后斩块,然后浸泡去掉血水待用;葱切段,姜蒜切片,青椒切小块待用;锅中油烧热,放入鸡块炸至金黄色后倒入干红花椒,辣椒,葱姜蒜爆香;然后倒入鸡块翻炒加入盐,糖等调味,再倒入青椒块翻炒均匀;最后撒上熟芝麻炒匀后即可出锅。

  • 王伟英雄纪念碑(21年前的今天王伟烈士牺牲)

    2001年4月1日,在我国南海领空,发现了一架美军侦察机,我军两架战斗机立即起飞进行拦截,美军飞机违反飞行规则,突然转向飞行,王伟来不及避让,所驾驶的飞机被撞掉了垂直尾翼,飞机急速冲向海面,王伟被迫跳海坠入海中,下落不明。之后,王伟被追授一级英模奖章,获“海军卫士”荣誉称号,中美南海撞机事件震惊了世界。他的妻子至今精心保管着王伟的每一张奖状,写给她的每一封信,他的每一张照片,每一个日记本,和每一幅绘画。

  • got(on(a(log(翻译(你知道翻译的意思是什么吗)

    下面希望有你要的答案,我们一起来看看吧!gotgotonalog翻译的意思是登上原木。got作为动词,意思是得到、明白。log作为名词,意思是原木、圆木、日志、(船)计程仪。题目中整个短语连接起来就是登上原木的意思。

  • 宏光mini敞篷版的价格是多少(9.99万元宏光MINI)

    9.99万元宏光MINIIT之家9月25日消息,上汽通用五菱旗下宏光MINIEV家族新成员今日宣告正式上市,包括两款GAMEBOY新配色、新款马卡龙车型,还有备受期待的敞篷版MINIEVCABRIO其中,五菱宏光MINIEV。

  • 茄子蒸着吃怎么做好吃(蒸茄子的方法)

    茄子蒸着吃怎么做好吃食材:茄子1个,蒜适量,干红辣椒适量,食用油适量,盐适量,醋适量。将切碎的蒜放入一个适当的容器里备用。带上隔热手套,将蒸锅里的盛有茄子的盘子端出来放在案板上,用刀将盘子里的片状茄子切成条状。取出适量的干红辣椒,清洗干净,然后将辣椒切成块状。取出炒锅,往炒锅里倒入适量的油,将盛有油的炒锅放在炉子上开火,等油热之后,倒入适量的切碎的蒜和切好的干红辣椒、迅速搅拌。