Bash

如何向 mkdir 命令添加自定義選項

  • February 26, 2017

我創建了很多目錄,我想讓我的生活變得懶惰並自動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) 來立即使用自定義名稱找到它,而自定義選項則不是這種情況。有覆蓋標準命令的案例,但這不是一個。

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