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
}

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.


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ń.


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


10

Co powiesz na:

$ mkdir newdirname; cd $_

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


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ć.


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 >

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.


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


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`"
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.