Czy istnieje skrót do mkdir foo i od razu w niego cd?

89

Często to robię

$ mkdir foo
$ cd foo

Działa to jako pojedyncze polecenie, ale więcej naciśnięć klawiszy i nie oszczędza czasu.

$ mkdir foo && cd foo

Czy jest na to skrót?

Edytować

Przy pomocy poniższej pomocy wydaje się to najbardziej elegancką odpowiedzią.

# ~/.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
}
macek
źródło
1
Możesz zmienić nazwę funkcji na, mkdirjeśli używasz command mkdir $1zamiast tylko mkdir $1w treści funkcji.
Andy
2
(1) dlaczego nie po prostu „mkdir $ 1; cd $ 1” zamiast „&&”? w ten sposób „cd” się powiedzie, nawet jeśli „mkdir” się nie powiedzie, a ty nie potrzebujesz rusztowania „już to istnieje”. (2) jak napisano, twoja funkcja nie będzie działać (monit o podanie nazwy katalogu). musisz umieścić to w osobnej klauzuli „if” od testu istnienia (obecnie w „elif”).
quack quixote

Odpowiedzi:

45

Nie jestem ekspertem od Linuksa / bash, ale spróbuj umieścić to w swoim .bashrc.

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

PS Dzięki Dennis za korzystanie command mkdir.

Andy
źródło
2
Zamiast tego po `which mkdir`prostu użyj command mkdir.
Dennis Williamson
1
Dzięki Dennis. Nie ma nic poniżej man command- czy możesz skierować mnie do referencji? (Mogę rozgryźć, co robi, ale opłaca się być dokładnym;)
Andy
2
commandjest opisane w instrukcjibash (z której jest wbudowany; nie jest to osobne polecenie). Możesz także spróbować help command.
grawity
To działa również dla zsh btw
Florian Loch,
93

The bash, zshShells

Jeśli nie chcesz, aby inna funkcja zapamiętywała i nie przeszkadzało ci bashizm:

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

$_(Dolar podkreślenie) zmienna polecenia bash zawiera najnowsze parametr. Gdyby więc użytkownik wpisał w wierszu poleceń następujące polecenie echo foo bar && echo $_ baz, wynik byłby następujący:

foo bar
bar baz

fishShell

W skorupce ryby wpisałbym:

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

Klawisz Alt w połączeniu z klawiszem strzałki w górę lub strzałki w dół przełącza historię parametrów poleceń.

kzh
źródło
4
To też działa zsh.
Nabil Kadimi
3
Czy możesz wyjaśnić, co to jest $ _? Nowicjusz tutaj.
arg20
@NabilKadimi Czy miałeś na myśli, że <kbd> Alt <kbd> + <kbd> ⬆ <kbd> działa dobrze w Zsh? W rzeczywistości, z zsh 5.4.2 i on-my-zsh, Alt + ⬆ daje mi znak „A”.
Weekend
+1 za $ _ - Stupid Sexy Flanders!
cig0
21

Dla użytkowników oh-my-zsh :
$ take 'directory_name'

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

Avijit Gupta
źródło
1
Czy możesz to wyjaśnić bardziej szczegółowo?
bwDraco
@bwDraco type take, to dostaniesz take is a shell function from /home/username/.oh-my-zsh/lib/functions.zsh. vi plik, a następnie otrzymaszfunction take() { mkdir -p $@ && cd ${@:$#} }
Weekend
10

Co powiesz na:

$ mkdir newdirname; cd $_

Jest to trochę łatwiejsze niż używanie &&, łączenie odpowiedzi na quack quoteote i kzh.

Alex
źródło
26
Chodzi o &&to, że cdnie zostanie wykonane, jeśli mkdirpolecenie się nie powiedzie
slhck
1
@slhck faktycznie to był punkt quixote: cd nawet jeśli mkdir zawiedzie (na przykład, jeśli już istnieje, zmuszając użytkownika do napisania drugiego polecenia, aby faktycznie cd na ścieżkę). Jednak w przeciwieństwie do tego, co mówi ta odpowiedź, nie jest to łatwe: && nie jest bardziej skomplikowane niż;
moala
7

Możesz spróbować czegoś takiego:

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

Zapisz ten skrypt w miejscu, które znajduje się na twojej ścieżce, na przykład / usr / local / bin lub ~ / bin (musisz umieścić ten ostatni na swojej ścieżce w pliku ~ / .profile). Następnie możesz to po prostu nazwać.

petersohn
źródło
4
jak to może działać? wydaje się, że jest to tylko cdw kontekście wykonywania ~/bin/mkcdskryptu, a nie wywołujący skrypt.
Erik Allik,
5
$echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc
$mkcd < pathtofolder/foldername >
mshameers
źródło
2

Oto prosta funkcja, którą umieściłem w moim ~/.config/fish/config.fishpliku, która wykonuje to zadanie:

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

-pvTag pozwala na tworzenie katalogów z podkatalogów.

Alex Fenwood Hughes
źródło
0

W zależności od pożądanego wyniku, jeśli katalog już istnieje.

Niepowodzenie, jeśli katalog już istnieje

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

Zmień katalog niezależnie

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

Użycie mkcd some / path / to / my / dir

brzęczy
źródło
0

Przekonałem się, że poniższa funkcja może utworzyć tylko jeden katalog, jeśli chcę jednocześnie tworzyć podkatalogi, to nie działa:

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

Więc zmieniłem to i teraz działa świetnie!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
użytkownik5723841
źródło