題 是否有mkdir foo的快捷方式並立即進入它?


這是我經常做的事情

$ mkdir foo
$ cd foo

這可以作為一個命令,但它更多的擊鍵,並節省時間。

$ mkdir foo && cd foo

這有什麼捷徑嗎?

編輯

通過使用下面的幫助,這似乎是最優雅的答案。

# ~/.bashrc
function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

82
2018-06-15 14:22


起源


您可以將該功能重命名為 mkdir 如果你使用 command mkdir $1 而不僅僅是 mkdir $1 在函數體中。 - Andy
(1)為什麼不簡單地“mkdir $ 1; cd $ 1”而不是“&&”?這樣,即使“mkdir”失敗,“cd”也會成功,而你不需要已經存在的腳手架。 (2)如你所寫的功能不起作用(提示你輸入目錄名)。你需要將它放在存在測試的單獨“if”子句中(目前在“elif”中)。 - quack quixote


答案:


我不是Linux / bash專家,但試著把它放在你的 .bashrc

function mkdir
{
  command mkdir $1 && cd $1
}

PS感謝Dennis的使用 command mkdir


40
2018-06-15 14:29



代替 `which mkdir`,只是使用 command mkdir。 - Dennis Williamson
謝謝丹尼斯。什麼都沒有 man command  - 你能引導我參考嗎? (我可以弄清楚它做了什麼,但要徹底地付出代價;) - Andy
command 描述於 手冊 bash (它是內置的;它不是一個單獨的命令)。你也可以試試 help command。 - grawity
這也適用於zsh btw - Florian Loch


bashzsh 殼

如果你不想記住另一個函數而不介意bashisms:

$ mkdir /home/foo/doc/bar && cd $_

$_ (美元下劃線)bash命令變量包含最新參數。因此,如果用戶要在命令行鍵入以下內容: echo foo bar && echo $_ baz,那麼輸出如下:

foo bar
bar baz

fish 貝殼

在魚殼中,我會輸入以下內容:

> mkdir / home / foo / doc / bar
> cd alt +↑

alt鍵與向上或向下箭頭鍵組合將循環顯示命令參數歷史記錄。


90
2017-08-12 11:26



這適用於 zsh 太。 - Nabil Kadimi
你能解釋一下$ _是什麼嗎?新手在這裡。 - arg20


對於 哦,我的-的zsh 用戶:
$ take 'directory_name' 

參考: https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet


16
2017-07-12 15:39



你能更詳細地解釋一下嗎? - bwDraco


關於什麼:

$ mkdir newdirname; cd $_

它比使用&&更容易,結合了庸醫堂吉訶德和kzh的答案。


10
2018-03-14 02:09



重點 && 就是它 cd 如果是,將不會被執行 mkdir 命令失敗 - slhck
@slhck實際上這是quixote的意思:cd即使mkdir失敗(例如,如果它已經存在,強制用戶寫第二個命令實際cd到路徑)。然而,與此答案所說的相反,這不是為了容易:&&並不比...更複雜。 - moala


你可以嘗試這樣的事情:

#!/bin/sh
mkdir $1 && cd $1

將此腳本保存到路徑中的某個位置,例如/ usr / local / bin或〜/ bin(您必須將最後一個腳本放入〜/ .profile文件中的路徑中)。然後你可以簡單地調用它。


7
2018-06-15 14:30



這怎麼可行?它似乎只是 cd 在執行的上下文中 ~/bin/mkcd 腳本,而不是腳本的調用者。 - Erik Allik


$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >

5
2017-09-19 06:01





如果目錄已存在,則取決於所需的結果。

如果目錄已存在則失敗

mkcd() {
    mkdir $1 && cd $1
}

無論如何更改目錄

mkcd() {
    mkdir $1 ; cd $1
}

用法 mkcd some / path / to / my / dir


0
2017-10-13 11:51





我發現下面的函數只能創建一個目錄,如果我想同時創建子目錄,它不起作用:

function mkdir
{
  command mkdir $1 && cd $1
}

所以我改變它,現在它的工作很棒!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}

0
2017-12-20 05:32





這是我放入的一個簡單的功能 ~/.config/fish/config.fish 完成此任務的文件:

function mkcd
    mkdir -pv $argv;
    cd $argv;
end

-pv tag允許使用子目錄創建目錄。


0
2017-07-23 12:30