Có một lối tắt đến mkdir foo và ngay lập tức cd vào nó?


89

Đây là điều tôi thường xuyên làm

$ mkdir foo
$ cd foo

Điều này hoạt động như một lệnh duy nhất, nhưng nó nhiều lần nhấn phím hơn và không tiết kiệm thời gian.

$ mkdir foo && cd foo

Có một lối tắt cho điều này?

Biên tập

Với việc sử dụng trợ giúp dưới đây, đây dường như là câu trả lời thanh lịch nhất.

# ~/.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
Bạn có thể đổi tên hàm thành mkdirnếu bạn sử dụng command mkdir $1thay vì chỉ mkdir $1trong thân hàm.
Andy

2
(1) tại sao không chỉ đơn giản là "mkdir $ 1; cd $ 1" thay vì "&&"? theo cách đó, "cd" thành công ngay cả khi "mkdir" không thành công và bạn không cần đến giàn giáo đã tồn tại. (2) như đã viết, chức năng của bạn sẽ không hoạt động (để nhắc bạn về tên thư mục). bạn cần đặt nó trong một mệnh đề "if" riêng biệt từ kiểm tra tồn tại (hiện đang ở "elif").
quack quixote

Câu trả lời:


45

Tôi không phải là chuyên gia về Linux / bash, nhưng hãy thử đưa nó vào .bashrc.

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

PS Cảm ơn Dennis đã sử dụng command mkdir.


2
Thay vì `which mkdir`, chỉ sử dụng command mkdir.
Dennis Williamson

1
Cảm ơn Dennis. Không có gì bên dưới man command- bạn có thể hướng tôi đến một tài liệu tham khảo? (Tôi có thể tìm ra những gì nó làm, nhưng nó trả tiền để được kỹ lưỡng;)
Andy

2
commandđược mô tả trong hướng dẫn sử dụngbash (mà nó được tích hợp sẵn; nó không phải là một lệnh riêng biệt). Bạn cũng có thể thử help command.
grawity

Điều đó cũng hoạt động cho zsh btw
Florian Loch

94

Các bash, zshShells

Nếu bạn không muốn một chức năng khác ghi nhớ và đừng bận tâm đến bashism:

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

Các $_(đô la gạch dưới) biến lệnh bash chứa tham số gần đây nhất. Vì vậy, nếu người dùng gõ như sau tại dòng lệnh : echo foo bar && echo $_ baz, thì đầu ra sẽ như sau:

foo bar
bar baz

các fishShell

Trong vỏ cá, tôi sẽ gõ như sau:

> mkdir / nhà / foo / doc / bar
> cd alt + ↑

Phím alt kết hợp với phím mũi tên lên hoặc xuống sẽ quay vòng qua lịch sử tham số lệnh.


4
Điều này làm việc trong zshquá.
Nabil Kadimi

3
Bạn có thể giải thích $ _ là gì không? Newbie đây.
arg20

@NabilKadimi Ý bạn là <kbd> Alt <kbd> + <kbd> ⬆ <kbd> hoạt động tốt trong Zsh? Trên thực tế, với zsh 5.4.2 và on-my-zsh, Alt + mang lại cho tôi ký tự 'A'.
Cuối tuần

+1 cho $ _ - Flanders Sexy ngu ngốc!
cig0


10

Thế còn:

$ mkdir newdirname; cd $_

Nó dễ hơn một chút so với sử dụng &&, kết hợp câu trả lời của quack quixote và kzh.


26
Điểm quan trọng &&cdsẽ không được thực thi nếu mkdirlệnh thất bại
slhck

1
@slhck thực sự đó là điểm của quixote: cd ngay cả khi mkdir không thành công (ví dụ nếu nó đã tồn tại, buộc người dùng phải viết lệnh thứ hai để thực sự cd vào đường dẫn). Tuy nhiên, trái với những gì câu trả lời này nói, điều đó không dễ hiểu: && không phức tạp hơn;
moala

7

Bạn có thể thử một cái gì đó như thế này:

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

Lưu tập lệnh này vào một nơi nào đó trong đường dẫn của bạn, ví dụ: / usr / local / bin hoặc ~ / bin (bạn phải đặt đoạn cuối này vào đường dẫn của bạn trong tệp ~ / .profile của bạn). Sau đó, bạn có thể chỉ cần gọi nó.


4
làm thế nào điều này có thể làm việc? nó dường như chỉ cdbên trong bối cảnh thực thi ~/bin/mkcdtập lệnh chứ không phải người gọi tập lệnh.
Erik Allik


2

Đây là một chức năng đơn giản tôi đặt trong ~/.config/fish/config.fishtệp của mình để thực hiện nhiệm vụ này:

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

Các -pvthẻ cho phép tạo ra các thư mục với thư mục con.


0

Tùy thuộc vào kết quả mong muốn nếu thư mục đã tồn tại.

Thất bại nếu thư mục đã tồn tại

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

Thay đổi thư mục bất kể

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

Sử dụng mkcd some / path / to / my / dir


0

Tôi thấy rằng hàm bên dưới chỉ có thể tạo một thư mục, nếu tôi muốn tạo thư mục con cùng một lúc, nó không hoạt động:

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

Vì vậy, tôi đã thay đổi nó và bây giờ nó hoạt động rất tốt!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.