Linux Shell 腳本基礎 - 在 Shell 腳本中更改目錄 🐧↓
為了方便起見,您可能想要執行一個 shell 腳本,將目前工作目錄變更到另一個目錄。
例如,如果您經常訪問文件目錄(~/Documents)並希望快速導航到那裡,您可以編寫 Bash 腳本來執行此操作。
在本主題中,我將向您展示如何使用 cd 命令執行此操作。在此過程中,我將解釋 cd 命令的一些複雜操作。
🐧 一個常見問題 讓我們從一個導航到 ~/Documents 目錄的腳本開始。我將其命名為 https://t.co/C30eEhxKsc:
🐧 分解我們的程式碼:• cd /home/linuxopsys/Documents - 將目前工作目錄改為 ~/Documents。 • pwd - 列印工作目錄。 • echo $$ - $$ 是 Bash 內部變量,包含正在執行腳本的 shell 的進程 ID (PID)。
🐧 運行我們的腳本如我們所見,運行我們的腳本會產生預期的 /home/linuxopsys/Documents 輸出以及 shell 的進程 ID。
檢查腳本運行後我們現在處於什麼位置。
您可以清楚地看到我們的目錄沒有改變。我們沒想到這一點,因為目前目錄並沒有更改為 /home/linuxopsys/Documents。那麼,問題可能出在哪裡呢?讓我們看看我們的 shell 的進程 ID:
我們可以清楚地看到,我們所在的 shell 的進程 ID(PID 4504)和 shell 腳本(PID 4574)完全不同。
這是常見行為。腳本在其獨立的 shell(子 shell/childshell)中運行。腳本結束時,這個獨立的 shell 會退出,留下我們目前所在的父 shell,它不受影響。
現在的問題是,我們要如何解決這個問題?所以,請繼續閱讀。
🐧 在父 shell 中執行腳本 我們可以使用 source 指令允許我們的腳本在目前 shell(父親 shell)中執行指令。
source 指令會在目前 shell 上下文中執行指令,而不是啟動一個新的 shell。點運算子是 source 指令的快速別名 (.)。太棒了!這樣我們就可以在目前 shell 中執行 bash 腳本了。我們來試試:
上面的程式碼片段清楚地表明,腳本的 PID 是執行它的父 shell 的 PID,而我們父 shell 的目前目錄現在是 ~/Documents。
太棒了!到目前為止,我們已經展示瞭如何使用 source 在目前 shell 中執行 shell 腳本。或者,我們也可以使用縮寫形式的 . 運算子。
🐧 使用 Bash 函數 為每個目錄編寫 Bash 腳本非常麻煩。我們可以將多個 Bash 指令組合成一個腳本:
現在,如果我們取得該文件,我們就可以在當前終端機中使用該腳本的功能。
🐧 使用別名 使用內建的 alias 指令,我們可以進一步改進 Bash 函數。由於別名需要的輸入較少,因此比函數更方便使用。讓我們將函數轉換為它們的別名變體:
與之前的 Bash 函數相比,我們可以看到它是多麼簡潔。此外,別名的使用方式與函數相同。
就是這樣!在本帖中,我們了解了在 Bash 腳本中使用 cd 指令的幾種方法。
首先,我們發現執行 Shell 腳本會啟動其自身的進程。最後,我們研究了函數和 alias 指令如何幫助我們改進 Bash 腳本。
感謝您讀到這裡,希望您覺得這個帖子有用,非常感謝您的回饋
如果您喜歡這個帖子,請查看@linuxopsys!因為我們將每天發布更多關於 Linux、系統管理員和 DevOps 的推文。