Bash

結合了mkdircd

  • February 1, 2022

有什麼方法(什麼是 bash 中最簡單的方法)可以結合以下內容:

mkdir foo
cd foo

的手冊頁mkdir沒有描述類似的東西,也許有一個花哨的版本mkdir?我知道它cd必須是內置的shell,所以對於花哨的東西也是如此mkdir……

別名?

功能?

mkcdir ()
{
   mkdir -p -- "$1" &&
      cd -P -- "$1"
}

將上面的程式碼放在~/.bashrc,~/.zshrc或你的 shell 提供的另一個文件中。然後通過執行例如source ~/.bashrc應用更改來獲取它。

之後只需執行mkcdir fooor mkcdir "nested/path/in quotes"

筆記:

  • "$1"mkcdir命令的第一個參數。如果它有空格或其他特殊字元,它周圍的引號可以保護參數。
  • --確保為新目錄傳遞的名稱不會被解釋為mkdiror的選項cd,從而有機會創建以-or開頭的目錄--
  • -pused onmkdir會在它們尚不存在時創建額外的目錄, used on-Pcd解析符號連結。
  • 除了source-ing rc,您還可以重新啟動終端仿真器/shell。

我認為創建一個函式是最合適的方法,但只是為了列出所有替代方法,您可以編寫:

mkdir foo && cd "$_"

$_是一個特殊參數,它保存上一個命令的最後一個參數。周圍的引號$_確保即使文件夾名稱包含空格也能正常工作。

為什麼要使用雙引號?

在某些 shell(例如 )中,即使目錄名稱包含空格,也不需要zsh將雙引號括起來。$_但是,此命令需要它們才能在 中工作bash

例如,在 macOS 10.13.6 上的 bash 3.2.57 中執行此命令:

mkdir "my directory" && cd $_

導致此輸出:

bash: cd: my: No such file or directory

但是,如果我們$_用雙引號括起來,則命令成功返回。

bash-3.2$ mkdir "my directory" && cd "$_"
bash-3.2$ echo $?
0
bash-3.2$

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