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

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

    推荐阅读
  • dnf怎么堆抗魔值(dnf一身100级神器抗魔)

    所以正式服应该也不会更新这一个内容。通过这些方法,就会出现很多虚假的名望侠,比如辣鸡属性的史诗辟邪玉。黑鸦每日/周本/单人/小队,流放者山脉,希洛克副本都是要求9885;征战模式13284。其次,这一个改动对于部分工作室来说,也是一个致命的改动,因为速成搬砖号,装备不达标就进不去风暴航路,一身100级神器完全不够名望值。

  • 紫外线什么波段有杀菌消毒作用(不止紫外线和热敏感)

    就目前情况看,新增确诊和疑似病例数量仍呈现上升趋势,全国多地进入一级响应。以下将盘点整个电磁波谱中具备杀菌作用的各波段辐射的杀菌原理及应用方向,为全民防控新型冠状病毒肺炎提供参考。γ伽马射线γ伽马射线,又称γ粒子流,是原子核能级跃迁退激时释放出的射线,是波长短于10-12米的电磁波。紫外线杀菌最先由丹麦科学家Finsen提出,并在1903年因此获得了诺贝尔生理和医学奖。红外线因其出色的加热能力而获得良好的灭菌效果。

  • 谈谈何为国之大者(的历史内涵和启示)

    “国之大者”的常见表述有“国之大事”“国之大计”“国之大务”“国之大权”等。例如,古代君臣将“轻徭薄赋”“仓廪有积”等进一步界定为“国之大者”,实际上是基于“重农爱民”、收结民心的政治考量。明确指出国家忧患在于民饥,及时制止了铸钱可能造成的严重后果。因而请求对教坊司进行预演,反映了其对职责的有效履行和对国之大事的严肃态度。这充分反映了践行“国之大者”,也要做到居安思危,防患于未然。

  • 公主绑带高跟鞋(高跟鞋绑芭蕾带成潮流时尚了)

    尤其是将绑带这样不堆成的随意绑起来,个性感更为突出。气质相当的慵懒且性感,这种鞋子的款也是大多数的人都能够hold住的。这双高跟凉鞋是芭蕾风绑带的设计,内搭一双白色的横条纹白色中筒袜,时尚感妥妥的。气质被综合以后,其搭配的范围就更大了。上身选择的是卡其色的高腰款连帽卫衣,下身则是军绿色的高腰哈伦裤,配上一双厚防水台的绑带机车短靴,十足的机车少女。

  • 抖音运营你了解多少(2022年抖音运营避坑指南)

    进入2022年,不少网友发现,抖音无论从版块设置还是推荐机制,都发生了不小的变化。抖音扶持四大方向最近大家打开抖音,点击一级入口“同城”版块,即可进入学习频道。抖音的第二大扶持方向是本地同城的吃喝玩乐。只要是粉丝量大于等于一千的网友,都可以参与,通过返佣挣钱。今年强调优质内容,要做出差异化。有人说那我接星图广告,可你的粉丝都是奔着看片来的,有购物精准度吗?

  • 操作系统最核心(高级程序员必学的89个核心操作系统概念)

    内核模式通常保留给操作系统的最低级别,最受信任的功能。内核模式下的崩溃是灾难性的;他们将停止整个计算机。它们主要由大型组织用于需要大量数据处理的关键任务应用程序。每个用户都在打孔卡等脱机设备上准备工作,并将其提交给计算机操作员。为了加快处理速度,将具有类似需求的作业一起批处理并成组运行。macOS是苹果公司推出的基于图形用户界面操作系统,为Macintosh的主操作系统。它的目标操作系统是Linux,但是大部分的BSD系统亦支持GNOME。

  • 诸葛亮怎么玩(诸葛亮攻略)

    虽然命中3个法球后,会有伤害缩减,但是3颗法球的爆发伤害也是不可小觑的。同时这个技能是属于诸葛亮的核心技能,也是诸葛亮唯一的位移技能是诸葛亮的核心。技能3——元气弹,诸葛亮蓄力后锁定目标发射出强力元气弹,对其英雄造成高额的法术伤害,目标每损失1%最大生命值元气弹就会自动增加2%伤害;蓄力期间可以随意移动躲避敌方英雄的攻击。并且可以使用时空穿梭,同时元气弹可以被其它的敌方英雄阻挡。

  • 初中化学一氧化碳性质小结(初中化学笔记4.3)

    初中化学笔记4.3第四章燃料及其燃烧4.3二氧化碳的实验室制法一、反应原理1、药品:大理石、稀盐酸(因为必须非纯净所以只能用中文)2、原理:化学方程式Ø注意点(1)不能用稀硫酸代替稀盐酸,因为生成物CaSO4微溶,覆盖。

  • 美队盾牌是最坚硬的(美队的三代盾牌)

    可怜的罗杰斯被那个大块头堵到一个巷子里,也正是在这里罗杰斯找到了他的第一代盾牌——一个桶盖。因为第三代盾牌已经不是罗杰斯的,而是真正的美国队长的盾牌了。

  • 贵阳市海拔高度是多少米(贵阳市海拔高度有几米)

    下面希望有你要的答案,我们一起来看看吧!贵阳市海拔高度是多少米当区南明河下游为506米,市中心海拔高度为1071米(喷水池)。贵阳市地处云贵高原东斜坡上,位于中国西南部云贵高原东部,海拔较高,纬度低,位于东经103°36~109°31,北纬24°37~29°13之间。相对高差100—200米,最高峰在水田镇庙窝顶,海拔1659米;最低处在南明河出境处,海拔880米。