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

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

    推荐阅读
  • 皮箱密码锁打不开怎么办(有什么打开的办法)

    接下来我们就一起去研究一下吧!皮箱密码锁打不开怎么办皮箱密码锁打不开可以采取听音开锁的方式。一般试3-4次就能听出对应位置,但要细心,还要有耐心。把密码锁找到合适的观测位置,最佳位置是数字盘与双眼齐平。当三个字母盘缺口处调整为同一朝向后,把三个数字盘都往左边转动两个数字后,拉开开锁键,正常情况下都是可以打开的。

  • 挂钟有啥牌子(挂钟什么牌子好)

    壁钟已成为当今家庭的常见装饰,但是市场上有许多种壁钟。该公司具有良好的声誉。自2002年以来,连续三年当选广东省钟表协会理事长。协会副主席单位。公司的质量管理工作也得到国际认可。2007年,他被深圳市政府授予“全国领导企业”称号。除上述品牌外,还有CompasCompas,UranusTelesonic,SEIKOSeiko,RhythmLisheng,HermleHemler和VICIS等品牌。大多数消费者以100元左右的价格购买挂钟。购买壁钟时要注意品牌企业。

  • 一封鸡毛信的幼儿故事(柚声绘本鸡毛信的故事)

    今日互动话题小朋友们你们认识哪些抗日时期的小英雄呢?故事中讲述了一个农村儿童团团长海娃,在抗日游击战争中替游击队送信,因而使游击队拔除敌人据点的故事。抗日战争时期,有个放羊的孩子叫海娃,他是村里儿童团的团长。有一天,海娃在送一封十万火急的鸡毛信时,与日伪军相遇,“怎么办?信藏在哪里呢?”小朋友们你们猜猜海娃的信有被发现吗?故事中的海娃,机智勇敢、不畏牺牲的精神,正是小朋友们要学习的。

  • 人体英语单词快速记忆(人体各个部位的英语词汇)

    好多宝贝和我说,不知道怎样用英语说出自己身体,各个部位的名称,有时候会很尴尬。

  • 抖音能关联另一个抖音号吗(你知道吗)

    我们一起去了解并探讨一下这个问题吧!抖音能关联另一个抖音号吗目前一个抖音号只能关联一个抖音号,如果需要特殊权限可以通过联系抖音客服获取相关功能权限。抖音,是一款可以拍摄短视频的音乐创意短视频社交软件,由今日头条孵化,该软件于2016年9月上线,是一个专注年轻人音乐短视频社区平台。用户可以通过这款软件选择歌曲,拍摄音乐短视频,形成自己的作品。

  • 王传君谈恋爱不如跳舞(王传君与女友李沫颔牵手秀恩爱)

    前不久,网上传出王传君与一名女子亲密吃饭喂食的照片,因为女主多次盯着镜头看,所以一度被大家怀疑是摆拍。李沫颔在6月13日凌晨晒出了自己与王传君的一双手,称“白黑”!王传君转发微博,并且称多多包颔!不过想必王传君并非故意打错字的,而是用了女友李沫颔的名字里最后一个字的谐音。前面说到李沫颔是15级学生,也就是她今年上大二,大概是96年出生的孩子,今年21岁。

  • 2022年妇女节是第几届(2022年是第几个妇女节)

    2022年妇女节是第几届2022年三八妇女节是我国99个妇女节,国际112个妇女节。国际妇女节是全世界许多国家都庆祝的节日。自设立之初,国际妇女节为发达国家及发展中国家的妇女开启了一个新天地。日益发展壮大的国际妇女运动,通过联合国四次妇女问题全球会议得以加强,国际妇女节纪念活动已成为一个争取妇女权利和妇女对政治经济事务的参与的集结令。

  • 慈溪附近的免费景区(免费旅游景点整理)

    整幢楼房占地5670平方米,集中西建筑的精华于一体,构思奇特,令人叹为观止。而上林湖,正处于越窑各个窑场的核心地带。因山体坡度合适,具有稳定的上升气流而深受广大滑翔伞爱好者喜爱。峙山两座对峙的山峰上分别建有啸风亭和震旦亭,供游人休憩和远眺。

  • 增强ct和普通ct的区别(增强ct和普通ct的区别是什么)

    增强CT和普通CT的区别,在于是否注射造影剂,今天小编就来说说关于增强ct和普通ct的区别?下面更多详细答案一起来看看吧!如果是肾脏功能差的患者,要慎重考虑做增强CT,因为注射造影剂会增加对肾脏的毒性。做增强CT还需要患者前一餐禁食,而普通的CT不需要注射造影剂,不需要患者空腹,只需要患者配合机器内的口令进行检查,一般没有特殊要求。

  • 奥特曼又火了,“世界上真的有奥特曼”

    在网友的帮助下,“奥特曼中国官方”联系上了男孩的家长,准备在家长和医生同意后,尽全力为小朋友实现心愿。他拍摄的《奥特Q》剧集,大受好评,从此便开始了奥特曼的故事。使得奥特曼成为了引起日本民众共鸣的作品。平成奥特曼会透过服装颜色的变化来表示他的形态:注重力量的红色、注重速度的蓝色、平均分配则是常色。上映于1966年的奥特曼系列,将在2021年迎来它的55岁生日。