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

在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(脚本文件名称)来执行脚本,从而自动重新加载配置文件。

    推荐阅读
  • 塑料水杯什么材质的比较安全(关于塑料水杯材质介绍)

    跟着小编一起来看一看吧!塑料水杯什么材质的比较安全塑料水杯使用PP材质的比较安全。pp材质是聚丙烯,聚丙烯为无毒、无臭、无味的乳白色高结晶的聚合物,密度只有0.90-0.91g/cm3,是目前所有塑料中最轻的品种之一。pp材质对水特别稳定,在水中的吸水率仅为0.01%,分子量约8万一15万。成型性好,但因收缩率大.厚壁制品易凹陷,对一些尺寸精度较高零件,很难于达到要求,制品表面光泽好。

  • 每天吃橙子会上火吗(橙子吃多了会不会上火)

    接下来我们就一起去研究一下吧!橙子中的营养成分非常丰富,含有碳水化合物、蛋白质、维生素C、胡萝卜素、维生素A、b族维生素、烯类、醇类、醛类、纤维素、果胶等物质,还含有钙、镁、锌、铁、磷、钾等矿物质元素,每天适量吃橙子能够补充身体所需的营养元素,维持身体健康,增强免疫力,并不会引起上火。一般建议一天吃中等大小的橙子1-3个,控制在200-350克为宜,最多不宜超过500克。

  • 战舰世界最新版本攻略(战舰世界9月新版花式宠粉)

    战舰世界最新版本攻略金秋,是收获的季节,也是欢乐的季节。在这个秋色怡人的九月,《战舰世界》携新版本0.11.8而来,喜迎七周年庆典。之前一直备受玩家们青睐的X系阿尔瓦罗·巴赞也正式上架军械库。为了庆祝《战舰世界》7周岁生日,七大洋收藏活动也如火如荼进行中。此次《战舰世界》周年庆典活动,官方还与《那年那兔那些事儿》合作推出了联动视频和主题活动。

  • 气门弹簧怎么区分正反? 气门弹簧怎么区分上下

    一般情况下是不分正反的,发动机气门弹簧多数为进排气分开的,但不用分前后。弹簧的两端面必须磨平并与弹簧轴线相垂直,以防止工作中弹簧产生歪斜;4、当气门弹簧的工作频率与其固有频率相等或成整数倍时,气门弹簧就会发生共振而使折断的几率增加。

  • 骨不连有哪些感觉(你听说过骨不连吗)

    当骨折不能愈合,则称为骨不连。一般来说,超过3-6个月未愈合为延迟愈合,若超过9个月骨折不愈合则称为骨不连。临床医生诊断骨不连不能只依靠患者自身描述症状,还要结合病史、实验室检查、影像检查及骨组织病检等综合判定。由于骨折部位的持续活动,大多数骨不连患者通常伴有疼痛、骨折断端微动等症状,对患者的正常生活造成的极大地不便和影响。读了本篇文章你对骨不连有没有更了解了呢?

  • 苹果苦瓜与普通苦瓜的区别 苦瓜和苹果

    苹果苦瓜与普通苦瓜的区别1、品种不同普通苦瓜是葫芦科苦瓜属植物,属于一种蔬菜,而苹果苦瓜由野生的山苦瓜和白玉苦瓜杂交而成的新型苦瓜品种。而苹果苦瓜形状为椭圆形,与苹果相似,表面的瘤皱比较大且突出,颜色为白色。

  • 郭守敬主要的奉献在哪方面(终于可以歇一歇了)

    然而,每一名民警却是悲痛交加的。沈阳姑娘李雪2018年考取公务员,入职商都县公安局。这种信赖是依靠谷永乐长期以来辛勤劳动准确筛选一点一点积淀而来的。作为政工干部,谷永乐在党组织和民警之间架起一座连心桥,传递着组织上无时不在无处不有的关爱。自从谷永乐牺牲后,商都县公安局退休民警微信群失去了往日的活跃气氛。妻子刘利荣2012年确诊乳腺癌,父亲谷文兰20

  • 第五章短期流动性及偿债能力分析(短期偿债能力指标之流动比率)

    保利地产2017年每1元的流动负债都有1.78元的流动资产相对应;2018年每1元的流动负债都有1.72元的流动资产相对应;2019年每1元的流动负债都有1.64元的流动资产相对应。*图1碧桂园与保利地产2017-2019年流动比率通过图1,可看出碧桂园的流动比率呈逐年平稳上升的状态,而保利地产流动比率则有下降趋势。而且从2018年后两家地产公司流动比率差距开始缩小,单独就此一项指标看,碧桂园集团的还债能力稍弱,但还需要结合其他数据进一步的分析。

  • 老人手捧遗像(为何能坦然拍遗像)

    杨鑫团队在为老人拍摄照片前,都会组织志愿者为前来拍照的老人梳头、整理服装;在拍摄时,志愿者还会逗老人笑,让摄影师能拍摄到老人开心幸福的模样;拍摄后还会使用成本更高的材质打印照片,利于老人长期保存。笔者认为,商洛大山里的老人之所以能坦然地拍摄自己的遗像,不只是他们能够豁达地看待死亡,更多的是有人能够关注到了他们的孤独,并给予了他们相应的理解与尊重,给他们平淡的生活当中增添了一抹色彩。

  • 水仙花怎么养(我们一起来了解一下)

    水仙花怎么养一种是土培,就是种在花盆里的土里。买回来的球可能还没有发芽,先把球埋在花盆里,上面再覆盖大概一厘米样子的土壤,浇足水,放在阴凉透风的地方等它发芽,发芽后就可以正常晒太阳了。最常见的就是水培水仙花了。准备一个专门水培的花盆,盛满水,花球放在里面,整个球体浸在水里面,但是水不能太多,浸到芽那里了,容易让芽烂掉。先是放在没什么太阳的地方,让它发芽,发芽之后就可以晒太阳了。