Bash

替換 Bash 腳本的兩個步驟: cd ./some_dir, ls -al?

  • March 14, 2017

我想編寫一個 bash scipt,它將更改為目標目錄並列出新目錄的內容,這一切都是一步完成的。它將替換我經常連續使用的兩個命令:

  • cd ./some_directory
  • ls -al

執行腳本後,我的目前目錄會改變,並且 ls -al 會顯示目錄列表。

cdl ./some_directory

這可能嗎?

您不能使用 shell 腳本執行此操作,因為腳本在新的 shell 中執行並且退出腳本會退出 shell 並“忘記”目錄更改。例如,請參閱更改目前目錄的腳本(cd,pwd)(站點上的某處可能有更詳細的答案)。

您需要改用一個函式:

cd1() {
   cd "$@"
   ls -al
}

另一個選項(在您的 .bashrc 中):

PROMPT_COMMAND='if [[ "$PWD" != "$_promptPWD" ]]; then ls -al; _promptPWD=$PWD; fi'
_promptPWD=$PWD

ls如果您更改了目錄,它會與 bash 的 PROMPT_COMMAND 功能掛鉤,讓它為您執行。缺點是:

  • 需要修補到任何現有的 PROMPT_COMMAND(如果有)
  • 使用另一個變數 ( _promptPWD)使環境混亂

好處是您可以繼續cd正常輸入,而無需輸入不同的內容來獲得ls行為。

引用自:https://unix.stackexchange.com/questions/351346