83

Это то, что я делаю часто

$ 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
}

9 ответов9

91

bash , zsh Снаряды

Если вы не хотите, чтобы другая функция запоминалась и не возражали против ошибок:

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

Командная переменная bash $_ (подчеркивание доллара) содержит самый последний параметр. Поэтому, если пользователь введет в командной строке следующее: echo foo bar && echo $_ baz , то результат будет следующим:

foo bar
bar baz

Раковина fish

В раковине рыбы я бы напечатал следующее:

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

Клавиша alt в сочетании с клавишей со стрелкой вверх или вниз переключает историю параметров команды.

43

Я не эксперт по Linux/bash, но попробуйте добавить это в ваш .bashrc .

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

PS Спасибо Деннису за использование command mkdir .

16

Для пользователей oh-my-zsh :
$ take 'directory_name'

Ссылка: https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet

10

Как насчет:

$ mkdir newdirname; cd $_

Это немного проще, чем использовать &&, комбинируя ответы кря-кихота и Кж.

7

Вы можете попробовать что-то вроде этого:

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

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

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

Вот простая функция, которую я вставил в файл ~/.config/fish/config.fish которая выполняет эту задачу:

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

Тег -pv позволяет создавать каталоги с подкаталогами.

0

Я обнаружил, что функция ниже может создать только один каталог, если я хочу создавать подкаталоги одновременно, он не работает:

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

Так что я изменил его, и теперь он отлично работает!

function mkcd
{
  command mkdir -pv $1 && cd $1 && echo "Now in `pwd`"
}
0

В зависимости от желаемого результата, если каталог уже существует.

Ошибка, если каталог уже существует

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

Изменить каталог независимо

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

Использование mkcd some/path/to/my/dir

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .