Как я могу создать каталог и изменить мой рабочий каталог на новый каталог?


18

Я ищу способ создать каталог и изменить свой текущий рабочий каталог на вновь созданный каталог с помощью одной команды. Как я могу это сделать?

т.е. вместо того, чтобы делать

user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$ 

я хочу делать

user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$

Какой может быть команда ?

Ответы:


27

Если вы действительно хотите, чтобы это была только одна команда, я предлагаю добавить что-то вроде этого в ваш .bashrc:

md () { mkdir -p "$@" && cd "$1"; }

Ввод md fooв командной строке создаст каталог с именем fooи cdсразу после него. Помните, что вам придется перезагрузить компьютер, .bashrcчтобы изменения вступили в силу (то есть откройте новую консоль или запустите source ~/.bashrc).

Ср http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time также для возможных альтернатив.


19

mkdir "NewDirectory" && cd "NewDirectory"

  • Часть за &&будет выполнена только в случае успеха 1-й команды.
  • Это называется списками команд в руководстве Bash.
  • Существует также сокращенная версия:

    mkdir "NewDirectory" && cd "$_"
    
  • Пример из командной строки:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (edit) Добавить "к командам, так как каталог может содержать пробел.


mkdir "NewDir" && cd "$_"работает лучше, чем mkdir "NewDir" && cd "NewDir"автоматическое завершение не работает. Кстати, что такое "$ _"?
TheKojuEffect

Более того, было бы очень удобно, если бы мы могли прикрепить переключатель, mkdirчтобы перейти в созданный новый каталог.
TheKojuEffect

@TheKojuEffect $ _ см. Gnu.org/software/bash/manual/bashref.html#Lists Относительно последнего: никто не мешает вам использовать псевдоним или функцию внутри .bashrc;)
Rinzwind

7

Для этого нет встроенной функции, но вы можете использовать функциональность оболочки, чтобы помочь вам не вводить аргумент cdкоманды снова после запуска mkdir:

  • Введите cd , затем Esc .(или Alt+ .), чтобы вставить последний аргумент из предыдущей команды.
  • cd !$выполняется cdпо последнему аргументу предыдущей команды.
  • Нажмите, Upчтобы вызвать предыдущую командную строку, затем отредактируйте ее, чтобы перейти mkdirв cd.

Вы можете определить простую функцию make-and-change-directory в вашем ~/.bashrc:

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

Перезагрузите ваш .bashrc( . ~/.bashrc) или перезапустите bash, и теперь вы можете напечатать mkcd new-directory.

Эта простая версия дает сбой в некоторых необычных случаях, связанных со странными именами каталогов или ..символическими ссылками. Вот тот, который делает. Для объяснения см. Версию этого вопроса для Unix и Linux .

mkcd () {
  case "$1" in
    /*) mkdir -p "$1" && cd "$1";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
    *) mkdir -p "./$1" && cd "./$1";;
  esac
}

Мой +1 специально для Bash-специфических ссылок на аргументы последней команды.
0xC0000022L

+1 за сверхинжиниринг. Excelsior! :)
mhvelplund

3
mkdir -p "as/many dirs/as you/want" && cd "$_"

есть решение, указанное выше (то же самое, что и мое решение, но без опции -p), но я думаю, что оно имеет несколько подводных камней.

man mkdir
...
-p, --parents
       no error if existing, make parent directories as needed
...

Это дает нам два преимущества:

  1. Мы можем создать столько подкаталогов, сколько необходимо за один раз
  2. Если каталог существует, он не выдаст ошибку, и мы все равно сможем переключиться на существующий каталог.

&& cd "$_"изменится на вновь созданный каталог, так как $_удерживайте значение, возвращенное моимmkdir


это работает для меня
Алхелал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.