背景
最近在通過shell腳本在Linux系統(tǒng)安裝Java或Python的過程中,遇到了shell腳本中的“source /etc/profile”無(wú)法生效的問題,雖然也可以在執(zhí)行完腳本后再次執(zhí)行“source /etc/profile”來(lái)使配置文件生效,但未免有些繁瑣,而我又比較懶,想徹底弄清其原因及解決辦法,從而一勞永逸。以下為本次解決問題的實(shí)踐記錄:
1.示例
如下圖所示,在python_install.sh腳本中,在安裝完P(guān)ython3、配置完環(huán)境變量后,使用source /etc/profile 命令來(lái)重新加載配置文件,并更改Python的安裝鏡像源。但通過./python_install.sh執(zhí)行腳本完成后,在命令行輸入:python3,仍然提示“-bash: python3: command not found”(表示重新加載配置文件未生效,系統(tǒng)無(wú)法識(shí)別到python3命令)
2.原因
執(zhí)行腳本時(shí),腳本中的命令是在子shell中執(zhí)行,子shell只能繼承父shell的環(huán)境變量,而無(wú)法修改父shell的環(huán)境變量,所做的修改僅對(duì)當(dāng)前子shell有效。所以,當(dāng)腳本執(zhí)行完成,回到shell命令行,原子shell腳本中執(zhí)行的source命令也就不生效。
3.解決辦法
方法一:
# 也就是上述提到的繁瑣的方法./python_install.sh #(或sh python_install.sh)source /etc/profile
方法二(本文主要想表達(dá)的方法):
# 通過source方式執(zhí)行腳本source python_install.sh#(或. python_install.sh注意點(diǎn)后面有空格)
4.shell中"."、"source"、"sh"、"./"的區(qū)別
命令
作用
作用域
source,等價(jià)于.(點(diǎn))
用于使shell讀取指定的shell文件,并依次執(zhí)行文件中的所有語(yǔ)句
作用于當(dāng)前shell進(jìn)程
sh
執(zhí)行指定shell腳本,在子shell中執(zhí)行腳本中的語(yǔ)句
創(chuàng)建一個(gè)子shell,在新的namespace中執(zhí)行此腳本,繼承父shell環(huán)境變量,但不改變父shell環(huán)境變量,僅對(duì)當(dāng)前子shell有效
./
執(zhí)行當(dāng)前腳本文件,前提是待執(zhí)行的文件具有可執(zhí)行屬性,等價(jià)于sh
創(chuàng)建一個(gè)子shell,在新的namespace中執(zhí)行此腳本,繼承父shell環(huán)境變量,但不改變父shell環(huán)境變量,僅對(duì)當(dāng)前子shell有效
5.其他注意事項(xiàng)
若shell腳本中使用了source命令,則需要使用bash(或source)來(lái)執(zhí)行,因?yàn)閟h和bash是不同的shell,source命令是bash shell的內(nèi)置命令,從C Shell 而來(lái),而sh中沒有source命令,所以用sh或者./運(yùn)行的時(shí)候,會(huì)開啟一個(gè)子shell進(jìn)程,子shell進(jìn)程繼承了父shell(無(wú)source命令)的特性,所以會(huì)報(bào)錯(cuò)“source: not found”。
6.卸載python3,再次使用腳本進(jìn)行安裝
rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps # 卸載python3whereis python3 |xargs rm -frv # 刪除python3所有殘余文件,注意是卸載Python3,千萬(wàn)要帶3,否則會(huì)把系統(tǒng)自帶的Python2和yum(依賴Python2)也卸載了whereis python3 # 查看是否存在python3python3 # 進(jìn)入python解釋器環(huán)境,若提示“-bash: python3: command not found”則說(shuō)明卸載成功
再次執(zhí)行shell腳本,一鍵安裝python
source python_install.sh
安裝成功后如下圖所示:
驗(yàn)證一下python3是否安裝成功,以及腳本最后更改的pip鏡像源是否生效:
從上圖可以看出,python3安裝成功,python鏡像源已成功替換為阿里云鏡像源。
小結(jié)
以上就是shell腳本中“source /etc/profile”無(wú)法生效的原因及解決辦法,以及shell中"."、"source"、"sh"、"./"的區(qū)別,只要腳本中使用了“source /etc/profile”,就可以使用:source xxx.sh(腳本文件名稱)來(lái)執(zhí)行腳本,從而自動(dòng)重新加載配置文件。
本文發(fā)布于:2023-02-28 21:08:00,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/1677729866100563.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:無(wú)法找到腳本文件(無(wú)法找到腳本文件.vbs).doc
本文 PDF 下載地址:無(wú)法找到腳本文件(無(wú)法找到腳本文件.vbs).pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |