Apakah ada jalan pintas ke mkdir foo dan langsung cd ke dalamnya?


89

Ini adalah sesuatu yang sering saya lakukan

$ mkdir foo
$ cd foo

Ini berfungsi sebagai satu perintah, tetapi lebih banyak penekanan tombol dan tidak menghemat waktu.

$ mkdir foo && cd foo

Apakah ada jalan pintas untuk ini?

Sunting

Dengan menggunakan bantuan di bawah ini, ini tampaknya menjadi jawaban yang paling elegan.

# ~/.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
Anda dapat mengubah nama fungsi menjadi mkdirjika Anda menggunakannya, command mkdir $1bukan hanya mkdir $1di tubuh fungsi.
— Andy

2
(1) mengapa tidak sekadar "mkdir $ 1; cd $ 1" alih-alih "&&"? dengan cara itu "cd" berhasil bahkan jika "mkdir" gagal, dan Anda tidak perlu perancah tidak-sudah-ada. (2) seperti yang ditulis fungsi Anda tidak akan berfungsi (untuk meminta Anda untuk nama direktori). Anda perlu memasukkannya ke dalam klausa "jika" yang terpisah dari tes keberadaan (saat ini dalam "elif").
— quack quixote

Jawaban:


45

Saya bukan ahli Linux / bash, tetapi coba letakkan ini di blog Anda .bashrc.

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

PS Terima kasih kepada Dennis untuk menggunakan command mkdir.


2
Alih-alih `which mkdir`, gunakan saja command mkdir.
— Dennis Williamson

1
Terima kasih Dennis. Tidak ada yang di bawah man command- dapatkah Anda mengarahkan saya ke referensi? (Saya bisa mencari tahu apa fungsinya, tetapi membayarnya harus teliti;)
— Andy

2
commanddijelaskan dalam manualbash (yang merupakan built-in; ini bukan perintah terpisah). Anda juga bisa mencoba help command.
— grawity

Itu juga berfungsi untuk zsh btw
— Florian Loch

94

The bash, zshKerang

Jika Anda tidak ingin fungsi lain mengingat dan tidak keberatan bashism:

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

The $_(dollar garis bawah) variabel perintah bash berisi parameter terbaru. Jadi, jika pengguna mengetik berikut di baris perintah:, echo foo bar && echo $_ bazmaka hasilnya adalah sebagai berikut:

foo bar
bar baz

The fishShell

Di kulit ikan, saya akan mengetik yang berikut:

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

Tombol alt dikombinasikan dengan tombol panah atas atau bawah akan menggilir riwayat parameter perintah.


4
Ini juga berfungsi zsh.
— Nabil Kadimi

3
Bisakah Anda jelaskan apa $ _ itu? Pemula di sini.
— arg20

@NabilKadimi Apakah maksud Anda <kbd> Alt <kbd> + <kbd> ⬆ <kbd> bekerja dengan baik di Zsh? Sebenarnya, dengan zsh 5.4.2 dan on-my-zsh, Alt + ⬆ memberi saya karakter 'A'.
— Akhir pekan

+1 untuk $ _ - Flanders Seksi Bodoh!
— cig0


10

Bagaimana dengan:

$ mkdir newdirname; cd $_

Ini sedikit lebih mudah daripada menggunakan &&, menggabungkan jawaban quack quixote dan kzh.


26
Intinya &&adalah bahwa cdtidak akan dieksekusi jika mkdirperintah gagal
— slhck

1
@ slhck sebenarnya itu adalah titik quixote: cd bahkan jika mkdir gagal (misalnya jika sudah ada, memaksa pengguna untuk menulis perintah kedua untuk benar-benar cd ke jalan). Namun berlawanan dengan apa yang dikatakan jawaban ini, itu bukan untuk kemudahan: && tidak lebih rumit dari;
— moala

7

Anda dapat mencoba sesuatu seperti ini:

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

Simpan skrip ini ke beberapa tempat yang ada di jalur Anda, misalnya, / usr / local / bin atau ~ / bin (Anda harus meletakkan yang terakhir ini di jalur Anda di file ~ / .profile Anda). Maka Anda bisa menyebutnya.


4
bagaimana ini bisa bekerja? tampaknya hanya cddi dalam konteks eksekusi ~/bin/mkcdskrip, bukan penelepon skrip.
— Erik Allik

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

2

Ini adalah fungsi sederhana yang saya taruh di ~/.config/fish/config.fishfile saya yang menyelesaikan tugas ini:

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

The -pvtag memungkinkan untuk pembuatan direktori dengan sub-direktori.


0

Tergantung pada hasil yang diinginkan jika direktori sudah ada.

Gagal jika direktori sudah ada

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

Ganti direktori bagaimanapun

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

Gunakan mkcd some / path / ke / my / dir


0

Saya menemukan bahwa fungsi di bawah ini hanya dapat membuat satu direktori, jika saya ingin membuat subdirektori pada saat yang sama, itu tidak berfungsi:

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

Jadi saya mengubahnya dan sekarang berfungsi dengan baik!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.