Bash

在進入目錄時執行 bash 腳本

  • February 18, 2022

進入目錄時執行腳本的最佳方式是什麼?
當我進入一個新目錄時,我希望 bash 像 RVM 一樣執行 projectSettings.bash 腳本。

您可以創建cd一個函式(andpoppushd),並使其檢測您是否進入該特定目錄。

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
unset_all_project_settings () {
 # do whatever it takes to undo the effect of projectSettings.bash,
 # e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
 case $PWD in
   /some/directory|/some/other/directory) . ./projectSettings.bash;;
   *) unset_all_project_settings;;
 esac
}

不要在您未列入白名單的目錄中執行此操作,因為這會使某人很容易欺騙您執行任意程式碼 - 向您發送一個存檔,因此您解壓縮它,切換到它創建的目錄,然後您現在執行攻擊者的程式碼。

我不推薦這種方法,因為這意味著即使您出於某種與項目工作無關的原因進入該目錄,也會執行腳本。我建議有一個特定的函式來更改項目目錄並獲取設置腳本。

myproj () {
 cd /some/directory && . ./projectSettings.bash
}

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