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

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

    推荐阅读
  • 微博未关注可以发多少条私信(未关注人私信防护)

    24日,@微博管理员发布消息,为认真落实中央网信办“清朗·网络暴力专项治理行动”工作要求,微博将持续优化网暴预警及保护机制。站方陆续上线友善发言提醒、“一键防护”功能,即将上线“未关注人私信防护”等功能,特别是针对未关注人发送的私信,用户需要确认接收并查看才能阅读私信的具体内容。通过相关功能机制优化,及时预警网络暴力苗头性、倾向性问题,有效降低用户遭受言论攻击甚至网暴的隐患风险。

  • 要躲春吗(要不要躲春)

    要躲春吗躲春其实就是躲太岁的意思,春天是一年当中阳气渐生,阴气渐弱,新旧交替的季节,中国命理学认为,在立春这一天,由于磁场和气场的缘故,通常会比较乱,对于气运较弱,命格不顺,尤其是犯太岁的人来说,就要避免在立春的时节太过张扬。从命理学的角度来讲,如果感觉自己去年运气特差,那么,立春这一天自己躲起来,不见生人,可以避过未来一年的病灾、口舌事非。严格来讲,立春这个时刻,才是真正新的一年壬寅年的到来。

  • 舞蹈的分类和介绍对比(舞蹈各种类介绍)

    身韵是中国古典舞的内涵,讲究“形神兼备,身心互融,内外统一”,它对舞者的要求较高,柔韧性和软开度的学习难度大。芭蕾舞同中国古典舞同属基础舞蹈,但是踮起的脚尖让很多人退而却步。

  • 红岩的主要内容(红岩描写的是什么)

    红岩的主要内容?下面更多详细答案一起来看看吧!红岩的主要内容红岩主要内容是:1948年,解放战争正以雷霆万钧之势向前推进,重庆正处于全面包围之中,盘踞在这里的国民党反动派进行着垂死的挣扎。而被关押在“中美合作所”集中营里的共产党人,则同他们展开了一场胜利前的殊死搏斗。

  • 人参果几月上市时间(人参果几月上市时间最好)

    人参果几月上市时间人参果的集中上市时间为9-11月份。人参果的危害正确且适量是人参果是没有危害的,但要注意下列情况:1.过量食用人参果可能会引起上火、消化不良。、3.体质燥热、患有胃肠道疾病的人群也不宜吃人参果,以免加重症状。

  • 北京北海公园验票时段过了怎么办(北海公园验票时段过了能不能进去)

    北京北海公园验票时段过了怎么办?公园退票规则:1.多人订单需要分别进行退票退款。

  • 灵山旅游景点攻略大全(十一灵山超全游玩攻略)

    喜迎国庆—HAPPYNATIONALDAY—热烈庆祝中华人民共和国成立73周年十一假期已进入第三天小编贴心为您准备了一份十一游灵山最全攻略送给满怀期待的你~坐标:江西灵山景区出发!陈诚福摄国庆最精彩国庆来灵山,看的不止是风景,还有超多惊喜福利在等着大家!最令人期待的就是集章抽奖赢好礼活动啦~75寸大彩电、精美电器、灵山年卡、灵山门索套票代金券......都在这个国庆期间,向所有游客朋友们大派送!

  • 文体活动是什么意思(文体活动的意思)

    跟着小编一起来看一看吧!文体活动是什么意思文体活动是指文艺活动和体育活动的总称。体育活动可以设置:拔河比赛、跳绳比赛、羽毛球比赛、夹乒乓球比赛、两人腿跑比赛等。文艺活动可以设置:接成语比赛、演讲比赛、读书月活动、文化沙龙、书法、绘画比赛等。

  • 好看皮囊千篇一律有趣灵魂(好看的皮囊千篇一律)

    好看的皮囊千篇一律美的东西总是让人另眼相看,再加上物以稀为贵——见惯了个头不均、饱经风吹雨淋的蔬菜瓜果,乍见早市上那些色彩明艳、个大饱满的果实,任谁也挪不开眼睛与早市上的韭菜相比,我家院里种的韭菜显然逊色了不少它们叶片。

  • 菠菜不熟吃了会怎样(菠菜不熟吃了的后果)

    接下来我们就一起去研究一下吧!菠菜不熟吃了会怎样没有烹制成熟的菠菜是不建议食用的,因为菠菜和其他的食材不同,菠菜中含有大量的草酸物质,这种物质在被人体吸收利用之后,对人体健康有很严重的影响。所以食用菠菜的时候一般都是将菠菜烹制成熟之后食用的,这样能有效的减轻菠菜中含有的草酸含量,不会对人体健康造成什么不利的影响。