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

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

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

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

Я хочу сделать

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

Что может сделать команда быть?

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

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

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

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

mkdir "NewDirectory" && cd "NewDirectory"

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

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

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

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

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

Вы можете определить простую функцию создания и изменения каталога в вашем ~/.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}
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