Mkdir foo ve hemen içine cd için bir kısayol var mı?


89

Bu sık sık yaptığım bir şey

$ mkdir foo
$ cd foo

Bu tek bir komut olarak çalışır, ancak daha fazla tuşa basar ve zaman kazandırmaz.

$ mkdir foo && cd foo

Bunun için bir kısayol var mı?

Düzenle

Aşağıdaki yardımın kullanılmasıyla, bu en şık cevap olarak görünmektedir.

# ~/.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
Sen işlevi yeniden adlandırabilirsiniz mkdirkullanırsanız command mkdir $1sadece yerine mkdir $1işlev gövdesinde.
Andy,

2
(1) neden "&&" yerine "mkdir $ 1; cd $ 1" değil? bu şekilde "cd", "mkdir" başarısız olsa bile başarılı olur ve bunu gerçekleştiren iskele yapmanıza gerek kalmaz. (2) yazdığınız gibi fonksiyonunuz çalışmaz (sizden bir dizin adı istemek için). Bunu varoluş testinden (şu anda "elif" te) ayrı bir "if" cümlesi koymanız gerekir.
quack quixote

Yanıtlar:


45

Linux / bash uzmanı değilim, ancak bunu sizin yerinize koymayı deneyin .bashrc.

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

PS Kullandığınız için Dennis'e teşekkürler command mkdir.


2
Bunun yerine `which mkdir`, sadece kullanın command mkdir.
Dennis Williamson,

1
Sağol Dennis. Altında hiçbir şey yok man command- beni bir referansa yönlendirir misin? (Ne işe yaradığını hesaplayabilirim, ancak kapsamlı olması gerekiyor;)
Andy

2
command(yerleşik bir; ayrı bir komut değildir) kılavuzundabash açıklanmaktadır . Ayrıca deneyebilirsin help command.
yerçekimi

Bu aynı zamanda zsh btw için de çalışıyor
Florian Loch

93

bash, zshKabuklar

Eğer başka bir işlevin hatırlamasını ve temelleri önemsemesini istemiyorsanız:

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

$_(Dolar tire) bash komut değişkeni En son parametre içerir. Bir kullanıcı komut satırına aşağıdakileri yazarsa: echo foo bar && echo $_ bazçıktı aşağıdaki gibi olur:

foo bar
bar baz

fishKabuk

Balık kabuğuna aşağıdakini yazarım:

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

Yukarı veya aşağı ok tuşlarıyla birlikte verilen alt tuş, komut parametresi geçmişi arasında geçiş yapar.


4
Bu da işe yarıyor zsh.
Nabil Kadimi,

3
$ _'In ne olduğunu açıklayabilir misiniz? Newbie burada.
arg20

@NabilKadimi Bunu mu demek istediniz: <kbd> Alt <kbd> + <kbd> ⬆ <kbd> Zsh’de iyi çalışıyor mu? Aslında, zsh 5.4.2 ve on-my-zsh ile, Alt + me bana 'A' karakterini verir.
Hafta sonu

Aptal Sexy Flanders için $ + 1!
cig0


10

Ne dersin:

$ mkdir newdirname; cd $_

Qu&M quixote ve kzh'in cevaplarını birleştirerek && kullanmaktan biraz daha kolaydır.


26
Önemli olan &&, cdeğer mkdirkomut başarısız olursa idam edilmeyecek
slhck 14:12

1
@slhck aslında bu, quixote'in amacıydı: cd, mkdir başarısız olsa bile (örneğin, zaten varsa, kullanıcıyı gerçekten cd'ye yola ikinci bir komut yazması için zorlar). Bununla birlikte, bu cevapların söylediğinin aksine, bu kolaylık için değil: &&;
moala

7

Böyle bir şeyi deneyebilirsiniz:

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

Bu betiği yolunuzdaki bir yere kaydedin, örneğin, / usr / local / bin veya ~ / bin (bu sonuncuyu ~ / .profile dosyanızdaki yolunuza koymalısınız). O zaman basitçe arayabilirsin.


4
bu nasıl çalışabilir? sadece betiğin cdyürütülmesi bağlamında ~/bin/mkcddeğil, betiğin arayanı gibi görünüyor .
Erik Allik

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

2

İşte ~/.config/fish/config.fishbu görevi yerine getiren dosyama koyduğum basit bir fonksiyon :

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

-pvEtiket alt dizinleri ile dizinleri oluşturulmasına olanak tanır.


0

Dizin zaten mevcutsa, istenen sonuca bağlı olarak.

Dizin zaten varsa başarısız

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

Ne olursa olsun dizini değiştir

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

Kullanımı Bazı / yol mkcd / için / benim / dir


0

Aşağıdaki fonksiyonun sadece bir dizin yapabileceğini buldum, aynı anda alt dizinler oluşturmak istersem, çalışmaz:

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

Bu yüzden onu değiştirdim ve şimdi harika çalışıyor!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.