Я ищу способ создать каталог и изменить свой текущий рабочий каталог на вновь созданный каталог с помощью одной команды. Как я могу это сделать?
т.е. вместо того, чтобы делать
user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$
я хочу сделать
user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$
Чем может быть команда ?
Если вы действительно хотите, чтобы это была только одна команда, я предлагаю добавить что-то вроде этого в ваш .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]
Для этого нет встроенной функции, но вы можете использовать функциональность оболочки, чтобы помочь вам не вводить аргумент команды cd
снова после запуска mkdir
:
cd
, затем Esc kbd> . Kbd> (или Alt kbd> + . Kbd>), чтобы вставить последний аргумент из предыдущей команды . cd !$
выполняет cd
для последнего аргумента предыдущей команды. 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
}
mkdir "NewDirectory" && cd "NewDirectory"
&&
только выполнится, если 1-я команда успешно выполнится.Существует также краткая версия:
mkdir "NewDirectory" && cd "$_"
Пример из командной строки:
$ false && echo "yes"
$ true && echo "yes"
yes
(редактирование) Добавляет "к командам, так как каталог мог бы содержать пространство.
mkdir -p "as/many dirs/as you/want" && cd "$_"
существует упомянутое выше решение (то же как мое решение, но без-p опции), но я думаю, что это имеет несколько ловушек.
man mkdir
...
-p, --parents
no error if existing, make parent directories as needed
...
Это приносит нам две пользы:
&& cd "$_"
изменится на недавно созданный каталог, с тех пор $_
держите значение, возвращенное мой mkdir