Чи є ярлик до mkdir foo та негайно CD у нього?


89

Це те, що я часто роблю

$ mkdir foo
$ cd foo

Це працює як одна команда, але це більше натискань клавіш і не економить часу.

$ mkdir foo && cd foo

Чи є ярлик для цього?

Редагувати

З використанням наведеної нижче допомоги це здається найелегантнішою відповіддю.

# ~/.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
Ви можете перейменувати функцію, mkdirякщо ви використовуєте command mkdir $1замість просто mkdir $1в тілі функції.
Енді

2
(1) чому б не просто "mkdir $ 1; cd $ 1" замість "&&"? таким чином "CD" досягає успіху, навіть якщо "mkdir" виходить з ладу, і вам не потрібні будівельні ліси. (2) як написано, ваша функція не працюватиме (підкаже вам ім'я каталогу). вам потрібно поставити це в окремий пункт "якщо" від тесту існування (зараз у "elif").
хитаючий кіхот

Відповіді:


45

Я не фахівець з Linux / bash, але спробуйте вкласти це у своє .bashrc.

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

PS Завдяки Деннісу за використання command mkdir.


2
Замість цього `which mkdir`просто використовуйте command mkdir.
Денніс Вільямсон

1
Спасибі Деннісе. Нічого немає man command- ти міг би направити мене на довідку? (Я можу розробити те, що робить, але варто бути ретельним;)
Енді

2
commandописано в керівництвіbash (що це вбудована; це не окрема команда). Ви також можете спробувати help command.
grawity

Це також працює для zsh btw
Флоріан Лох

93

В bash, zshРаковини

Якщо ви не хочете, щоб інша функція запам'ятовувала і не заперечувала проти башизмів:

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

$_(Долари підкреслення) змінна команда Баша містить самий останній параметр. Отже, якщо користувач повинен ввести наступне в командному рядку:, echo foo bar && echo $_ bazтоді вихід буде таким:

foo bar
bar baz

fishShell

У рибну шкаралупу я б набрав наступне:

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

Клавіша alt у поєднанні або зі стрілкою вгору, або вниз стрілкою буде переходити через історію параметрів команди.


4
Це zshтеж працює .
Набіл Кадімі

3
Чи можете ви пояснити, що таке $ _? Новачок тут.
arg20

@NabilKadimi Ви мали на увазі, що <kbd> Alt <kbd> + <kbd> ⬆ <kbd> добре працює в Zsh? Насправді, з zsh 5.4.2 та on-my-zsh, Alt + ⬆ надає мені символ "A".
вихідні

+1 за $ _ - Дурна сексуальна Фландрія!
cig0

21

Для користувачів -мій-zsh :
$ take 'directory_name'

Довідка: https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet


1
Чи можете ви пояснити це детальніше?
bwDraco

@bwDraco type take, тоді ви отримаєте take is a shell function from /home/username/.oh-my-zsh/lib/functions.zsh. vi файл, який ви отримаєтеfunction take() { mkdir -p $@ && cd ${@:$#} }
вихідні

10

Що стосовно:

$ mkdir newdirname; cd $_

Це трохи простіше, ніж використовувати &&, поєднуючи відповіді шарлатанського кіхота та kzh.


26
Справа в &&тому, що cdвона не буде виконана, якщо mkdirкоманда не
виконана

1
@slhck насправді в цьому і полягав кіхот: cd, навіть якщо mkdir не працює (наприклад, якщо він вже існує, змушує користувача написати другу команду, щоб насправді cd перейти до шляху). Однак, на противагу тому, що ця відповідь говорить, це не для простоти: && не складніше, ніж ;.
моала

7

Ви можете спробувати щось подібне:

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

Збережіть цей скрипт в якомусь місці, яке знаходиться на вашому шляху, наприклад, / usr / local / bin або ~ / bin (цей останній слід покласти у свій шлях у файлі ~ / .profile). Тоді ви можете просто назвати це.


4
як це може працювати? це здається лише cdвсередині контексту виконання ~/bin/mkcdсценарію, а не викликає сценарій.
Ерік Аллік


2

Ось проста функція, яку я помістив у свій ~/.config/fish/config.fishфайл, який виконує це завдання:

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

-pvТег дозволяє для створення каталогів з підкаталогами.


0

Залежно від бажаного результату, якщо каталог вже існує.

Помилка, якщо каталог вже існує

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

Змінити каталог незалежно

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

Використання mkcd деякий / шлях / до / мій / реж


0

Я виявив, що наведена нижче функція може створювати лише один каталог, якщо я хочу одночасно робити підкаталоги, вона не працює:

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

Тож я змінив його і зараз він працює чудово!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.