.bashrc 使用「exit」呼叫的腳本阻止登入

.bashrc 使用「exit」呼叫的腳本阻止登入

我發現自己出局了;在我製作了一個腳本並從 呼叫它之後,我無法登入 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

達到你想要的效果。

相關內容