
我發現自己出局了;在我製作了一個腳本並從 呼叫它之後,我無法登入 root ~/.bashrc
。
~/.bashrc:
#... do stuff then run my script
source ~/myscript.sh
〜/ myscript.sh:
#!/bin/bash
if [myConditional]; then
exit
fi
# otherwise do stuff
我所希望的是,當我以 root 身份登入時,myscript.sh 將運行,如果 myConditional 為 true,myscript.sh 將停止運行任何進一步的命令,但會返回到 .bashrc 並且用戶仍將登入像往常一樣作為根。但相反,exit
我根本無法登入!它只是讓我返回登入提示。
除此之外我還應該使用另一個指令嗎exit
?顯然,我可以if
透過聲明else
並刪除來擴展該聲明exit
,但出於教育目的,我想知道是否有更合適的方法。 (部分原因是我想避免深層嵌套的if
語句;它可能是一個相當大的腳本)
答案1
source filename.sh
(或. filename.sh
)運行以下內容filename.sh
在當前的解釋器中(本質上,就好像您當時複製了內容一樣)。因此,exit
將退出該解釋器。
如果您只想將腳本作為單獨的程式運行,請不要使用source
:~/myscript.sh
如果您先使用 使其可執行chmod +x ~/myscript.sh
,則只會運行它,或者如果您願意,也可以使用bash ~/myscript.sh
。這將啟動一個新的 shell 來運行您的腳本,就像系統上的任何其他程式一樣。
另一方面,如果您確實想要source
您的腳本(例如,因為它將設定環境變數),您可以停止執行檔案的其餘部分,而不會影響.bashrc
執行它的 shell使用return
:
return
也可用於終止使用.
(source
) 內建函數執行的腳本的執行,傳回n
或腳本內執行的最後一個指令的退出狀態作為腳本的退出狀態
在這種情況下,您的myscript.sh
文件將包含:
if [[ condition ]]
then
return 0
fi
達到你想要的效果。