Bash
如何向 mkdir 命令添加自定義選項
我創建了很多目錄,我想讓我的生活變得懶惰並自動
cd
進入我使用選項創建的目錄,-g
結果為mkdir -g foo
終端將是這樣的:
User:/$ mkdir -g foo User:/foo/$
我看過這個頁面,但沒有成功。
我已經嘗試過
.bash_profile
使用此命令,但它只是完全覆蓋了該命令。(後來意識到這是一個無限循環)mkdir() { if "$1" -eq "-g" mkdir "$2" cd "$2" else ## do the regular code fi }
另一件事是我不想製作更多別名,因為我最終會忘記我擁有的所有別名。
所以不是我不想要這個:
完全的命令。(後來意識到這是一個無限循環)
mkcd() { if "$1" -eq "-g" mkdir "$2" cd "$2" else ## do the regular code fi }
我知道我很可能沒有正確的選擇,請糾正我,但任何幫助都會很棒!
使用
command
內置呼叫外部命令,繞過任何同名函式。還:
- 接下來
if
是一個普通的命令。要執行字元串比較,請呼叫test
內置函式,或[
使用相同語法加上 final 的內置函式]
,或[[ … ]]
具有更寬鬆語法的構造。有關更多資訊,請參閱使用單括號或雙括號 - bash。- 運算符用於比較
-eq
整數。用於=
比較字元串。- 我添加了一些對傳遞多個參數的有限支持(包括諸如 的選項
-p
)。下面我cd
只在mkdir
成功時呼叫,並在傳遞給函式的最後一個參數上呼叫它。-g
只會被認為是第一個參數。解析選項以從它所在的任何位置定位和刪除它是可能的,但更難。mkdir () { local do_cd= if [ "$1" = "-g"]; then do_cd=1 shift fi command mkdir "$@" && if [ -n "$do_cd" ]; then eval "cd \"\${$#}\"" fi }
我不建議定義您的自定義選項。它們不會顯示在
--help
手冊頁或手冊頁中。它們並不比定義具有不同名稱的命令更令人難忘:要麼你不記得你擁有它們,並且與具有不同名稱的命令相比沒有優勢,要麼你不記得它們是自定義的, 然後您可以通過詢問 shell 是內置命令還是函式 (type mkcd
) 來立即使用自定義名稱找到它,而自定義選項則不是這種情況。有覆蓋標準命令的案例,但這不是一個。