詳解shell中source、sh、bash、./執(zhí)行腳本的區(qū)別
1、source命令用法:
source FileName
作用:在當(dāng)前bash環(huán)境下讀取并執(zhí)行FileName中的命令。該filename文件可以無(wú)"執(zhí)行權(quán)限"
注:該命令通常用命令“.”來(lái)替代。
如:source .bash_profile
. .bash_profile兩者等效。
source(或點(diǎn))命令通常用于重新執(zhí)行剛修改的初始化文檔。
source命令(從 C Shell 而來(lái))是bash shell的內(nèi)置命令。
點(diǎn)命令,就是個(gè)點(diǎn)符號(hào),(從Bourne Shell而來(lái))。
2、sh和bash命令用法:
sh FileName
bash FileName
作用:在當(dāng)前bash環(huán)境下讀取并執(zhí)行FileName中的命令。該filename文件可以無(wú)"執(zhí)行權(quán)限"
注:兩者在執(zhí)行文件時(shí)的不同,是分別用自己的shell來(lái)跑文件。
sh使用“-n”選項(xiàng)進(jìn)行shell腳本的語(yǔ)法檢查,使用“-x”選項(xiàng)實(shí)現(xiàn)shell腳本逐條語(yǔ)句的跟蹤,
可以巧妙地利用shell的內(nèi)置變量增強(qiáng)“-x”選項(xiàng)的輸出信息等。
3、./的命令用法:
./FileName
作用:打開(kāi)一個(gè)子shell來(lái)讀取并執(zhí)行FileName中命令。
注:運(yùn)行一個(gè)shell腳本時(shí)會(huì)啟動(dòng)另一個(gè)命令解釋器.
每個(gè)shell腳本有效地運(yùn)行在父shell(parent shell)的一個(gè)子進(jìn)程里.
這個(gè)父shell是指在一個(gè)控制終端或在一個(gè)xterm窗口中給你命令指示符的進(jìn)程.
shell腳本也可以啟動(dòng)他自已的子進(jìn)程.
這些子shell(即子進(jìn)程)使腳本并行地,有效率地地同時(shí)運(yùn)行腳本內(nèi)的多個(gè)子任務(wù).
shell的嵌入命令:
: 空,永遠(yuǎn)返回為true
. 從當(dāng)前shell中執(zhí)行操作
break 退出for、while、until或case語(yǔ)句
cd 改變到當(dāng)前目錄
continue 執(zhí)行循環(huán)的下一步
echo 反饋信息到標(biāo)準(zhǔn)輸出
eval 讀取參數(shù),執(zhí)行結(jié)果命令
exec 執(zhí)行命令,但不在當(dāng)前shell
exit 退出當(dāng)前shell
export 導(dǎo)出變量,使當(dāng)前shell可利用它
pwd 顯示當(dāng)前目錄
read 從標(biāo)準(zhǔn)輸入讀取一行文本
readonly 使變量只讀
return 退出函數(shù)并帶有返回值
set 控制各種參數(shù)到標(biāo)準(zhǔn)輸出的顯示
shift 命令行參數(shù)向左偏移一個(gè)
test 評(píng)估條件表達(dá)式
times 顯示shell運(yùn)行過(guò)程的用戶(hù)和系統(tǒng)時(shí)間
trap 當(dāng)捕獲信號(hào)時(shí)運(yùn)行指定命令
ulimit 顯示或設(shè)置shell資源
umask 顯示或設(shè)置缺省文件創(chuàng)建模式
unset 從shell內(nèi)存中刪除變量或函數(shù)
wait 等待直到子進(jìn)程運(yùn)行完畢
下面再看下 shell 腳本各種執(zhí)行方式(source ./*.sh, . ./*.sh, ./*.sh)的區(qū)別
結(jié)論一: ./*.sh的執(zhí)行方式等價(jià)于sh ./*.sh或者bash ./*.sh,此三種執(zhí)行腳本的方式都是重新啟動(dòng)一個(gè)子shell,在子shell中執(zhí)行此腳本。
結(jié)論二: .source ./*.sh和 . ./*.sh的執(zhí)行方式是等價(jià)的,即兩種執(zhí)行方式都是在當(dāng)前shell進(jìn)程中執(zhí)行此腳本,而不是重新啟動(dòng)一個(gè)shell 而在子shell進(jìn)程中執(zhí)行此腳本。
驗(yàn)證依據(jù):沒(méi)有被export導(dǎo)出的變量(即非環(huán)境變量)是不能被子shell繼承的
驗(yàn)證結(jié)果:
[root@localhost ~]#name=dangxu //定義一般變量
[root@localhost ~]# echo ${name}
dangxu
[root@localhost ~]# cat test.sh //驗(yàn)證腳本,實(shí)例化標(biāo)題中的./*.sh
#!/bin/sh
echo ${name}
[root@localhost ~]# ls -l test.sh //驗(yàn)證腳本可執(zhí)行
-rwxr-xr-x 1 root root 23 Feb 6 11:09 test.sh
[root@localhost ~]# ./test.sh //以下三個(gè)命令證明了結(jié)論一
[root@localhost ~]# sh ./test.sh
[root@localhost ~]# bash ./test.sh
[root@localhost ~]# . ./test.sh //以下兩個(gè)命令證明了結(jié)論二
dangxu
[root@localhost ~]# source ./test.sh
dangxu
[root@localhost ~]#
總結(jié)
以上所述是小編給大家介紹的shell中source、sh、bash、./執(zhí)行腳本的區(qū)別,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
在CentOS中安裝Rancher2并配置kubernetes集群的圖文教程
這篇文章主要介紹了在CentOS中安裝Rancher2并配置kubernetes集群的圖文教程,通過(guò)本文可以掌握Docker常用操作,了解K8s基本原理,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-05-05
Linux定時(shí)任務(wù)的設(shè)置及 crontab 配置指南
這篇文章主要介紹了Linux定時(shí)任務(wù)的設(shè)置及 crontab 配置指南,需要的朋友可以參考下2017-07-07
UNIX系統(tǒng)上實(shí)現(xiàn)撥號(hào)
UNIX系統(tǒng)上實(shí)現(xiàn)撥號(hào)...2006-10-10
Linux/ubuntu 下安裝pyspider的過(guò)程
pyspider 是 python 語(yǔ)言的一個(gè)爬蟲(chóng)工具,提供有GUI界面,可以在web界面中制定任務(wù)、爬取數(shù)據(jù)和導(dǎo)出結(jié)果。這篇文章主要介紹了Linux/ubuntu 下安裝pyspider的過(guò)程,需要的朋友可以參考下2018-04-04
在線(xiàn)rss閱讀聚合器lilina-0.7安裝筆記
在線(xiàn)rss閱讀聚合器lilina-0.7安裝筆記...2007-05-05

