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

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

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

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

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

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

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

18
задан 13 February 2013 в 23:55

4 ответа

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

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

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

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

0
ответ дан 13 February 2013 в 23:55

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

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

Вы можете определить простую функцию создания и изменения каталога в вашем ~/.bashrc:

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

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

Эта простая версия дает сбой в некоторых необычных случаях, связанных со странными именами каталогов или .. и символическими ссылками. Вот тот, который делает. Для объяснений см. Unix & amp; Версия этого вопроса для 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
}
0
ответ дан 13 February 2013 в 23:55

mkdir "NewDirectory" && cd "NewDirectory"

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

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

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

19
ответ дан 13 February 2013 в 23:55
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

3
ответ дан 13 February 2013 в 23:55

Другие вопросы по тегам:

Похожие вопросы: