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

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

    推荐阅读
  • 史上最好看的结婚证(你手中的那本结婚证)

    陈婉玲介绍,现在丢失婚姻证书民政部门会再给出一本原样证件,只是多了“补办”相关字样。当时,全省婚姻证书全部由工商联委托印刷厂统一印制。2020年,陈婉玲所在的工作地点要搬迁。陈婉玲表示,这些收获还得益于兄弟省市民政部门之间的多年默契。陈婉玲表示,这样一来可以更好地留存文件,二来如果有跨省相关业务,也可以供参考核对证件的真实性。

  • 日本祗园艺伎街(京都里的舞妓与艺妓)

    而艺妓的“妓”是指前者,因为艺妓在原则上只是艺术表演者。艺伎发源于京都。在日本人的观念中,艺妓是非常体面的职业,女孩子能成为一名合格的艺妓是非常了不起的事情,一个家庭有人担任艺妓将会被视为一种荣誉。舞妓到艺妓,是级别的升高。寓意艺妓是靠才艺而非外形来吸引目光。

  • 各民族传统节日(少数民族传统节日)

    “那达慕”大会是蒙古族历史悠久的传统节日,在蒙古族人民的生活中占有重要地位。“那达慕”大会上有惊险刺激的赛马、摔跤,令人赞赏的射箭,有争强斗胜的棋艺,有引人入胜的歌舞。前五名到达终点者,成为草原上最受人赞誉的健儿。每年农历6月初四开始的为期5天的那达慕,是蒙古族人民的盛会。2006年5月20日,那达慕经国务院批准列入第一批国家级非物质文化遗产名录。人数多时达十几万人。

  • 家庭教育的方法和注意事项和规矩(10种常见的家庭教育方法)

    家庭教育在整个儿童教育中占有非常重要的地位。因此,作为家长,家庭教育对孩子各方面的影响不容忽视。父母应该避免把孩子的时间花在各种活动上。笑是一项很好的运动。健康的饮食使孩子身体健康,情绪稳定。无论是晚餐还是零食,尽量遵循低脂、低糖、新鲜均衡饮食等健康原则。对成年人来说,拥抱也可以减轻压力,平静不安的情绪。

  • 研究生论文一般是多少字(研究生投稿论文需要多少字)

    完成后,他们将提交他们的论文,只有检查论文的重复率,他们才能提交成功。由于学历和学年的差异,每年高校研究生对提交论文的要求都不一样,导致很多研究生对提交论文的字数有困惑。除了一种情况,高校对这部分有特殊要求,可以扩展到2000字左右。硕士研究生提交论文的研究课题的前瞻性计划和依据是毕业论文中心的叙述。不同大学和期刊的要求不一样,所以学生一定要根据自己学校的规定来写。

  • 琐记读书笔记(琐记的内容是什么)

    琐记读书笔记《琐记》是鲁迅先生的一篇散文,是《朝花夕拾》一书中第八篇文章。《琐记》介绍了鲁迅先生冲破封建束缚,为追求新知识,离家求学至出国留学的一段生活经历。文章从作者切身感受出发,写出了进化论及资产阶级民主主义思想对进步青年的影响。第九段中说城中唯一的一所中西学堂也成了“众矢之的”。这也足见当时人们头脑之古旧、思想之老化,人们对新思想的不接受与排斥。

  • 血小板持续下降是什么病引起的(血小板忽高忽低)

    由自身的免疫系统对血小板造成破坏,导致血液中血小板含量降低。一些长期血小板计数较低,尤其是伴有出血倾向的ITP患者需要进行维持治疗,以使其血小板数量能够维持在相对安全的水平。血小板减少症的主要不良反应是出血,尤其是严重出血如颅内血肿,因而治疗主要是减少出血。目前已知一些GPⅡb/Ⅲa抗体引发的ITP对激素治疗不敏感,因此在ITP病因和治疗方面还需要更多研究。

  • 男性遗精应该怎么预防?(男性遗精应该怎么预防呢)

    遗精的原因主要是脑皮层抑制过程的弱化,中枢的兴奋性增强,在有关性的刺激下,往往会出现遗精。③取命门与肾俞、腰阳关和三阴交,两组交替使用,隔日一次,采用针法加灸5壮。15日是疗程,隔姜灸时患者热感向明部方向扩散效果更好。死精子和精子畸形过多:选气海、三阴交,或命门、地机,两组交替使用,每日针1次,每次保留15分钟,留针期间行针1次,18次为一疗程。

  • 世界第二大水电站白鹤滩水电站今年累计发电量突破100亿千瓦时

    目前,白鹤滩水电站最后两台机组总装工作接近尾声,工程进入全面投产冲刺阶段。受访者供图据了解,白鹤滩水电站位于四川省宁南县和云南省巧家县交界处金沙江干流河段,是实施“西电东送”的国家重大工程。长龙山电站最后一台机组计划于5月15日启动试运行工作,预计将于今年6月底实现全面投产。长龙山电站有关负责人表示。全国党媒信息公共平台提供信息发布传播服务。

  • 有趣的新年贺卡的制作方法(新年贺卡的简单制作)

    1、准备三张大小一样的正方形卡纸,将卡纸沿对角线多次折叠,折成小三角,用铅笔在纸上画一个半圆,用剪刀沿半圆剪开。