Bash
在進入目錄時執行 bash 腳本
進入目錄時執行腳本的最佳方式是什麼?
當我進入一個新目錄時,我希望 bash 像 RVM 一樣執行 projectSettings.bash 腳本。
您可以創建
cd
一個函式(andpop
和pushd
),並使其檢測您是否進入該特定目錄。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 }