Как мне поместить mkdir cd во вновь созданный каталог? [дубликат]

Часто я печатаю эти команды в bash:

mkdir something
cd something

Я почти никогда не делаю этого:

mkdir something
ls # something in the current directory, not ./something/

И никогда этого:

mkdir something something2

Как мне поместить mkdir cd во вновь созданный каталог? Под этим я подразумеваю, что если я mkdir something , то сразу после этого выполняется команда cd something .

Пример:

$ pwd
/home/me
$ mkdir something
$ pwd
/home/me/something
8
задан 20 June 2017 в 13:42

4 ответа

Я предлагаю создать функцию:

function mydir(){ mkdir -p "$1" && cd "$1"; }

это делает то, что Вы хотите, можно добавить его к Вашему .bashrc, таким образом, это будет доступно во всех оболочках.

  • $1 первый аргумент, который Вы отправляете в функцию, название каталога.

можно использовать его как:

$ mydir ~/my-new-directory
$ pwd
~/my-new-directory

Примечание: можно измениться mydir с mkdir для переопределения его, однако я предлагаю пользовательское имя, которое не существует в системе как mydir или cmkdir; можно проверить, чтобы видеть, существует ли команда с помощью type command.

14
ответ дан 23 November 2019 в 05:21

Я обычно следую mkdir something cd Высокий звук +. , который завершает команду с последним аргументом предыдущей команды, т.е. имя каталога.

9
ответ дан 23 November 2019 в 05:21

Используя последний аргумент команды

Вы не должны перепечатывать название созданного каталога. Использовать $_ переменная:

От удара 4,3 руководства:

   _      At shell startup, set to the absolute pathname  used
          to  invoke  the shell or shell script being executed
          as passed in the environment or argument list.  Sub‐
          sequently,  expands to the last argument to the pre‐
          vious command, after expansion.  

Таким образом, использование было бы как так:

bash-4.3$ mkdir mydir
bash-4.3$ cd $_

Используя '{список;}' соединяют команду

Если мы хотели использование всего одна строка, объедините команды в составную команду { (обратите внимание что продвижение пространства прежде { и точки с запятой для каждой команды требуются):

bash-4.3$ pwd
/home/xieerqi
bash-4.3$ { mkdir mydir;cd $_;}
bash-4.3$ pwd
/home/xieerqi/mydir

Важно отметить что это {list;} составная структура команды выбрана по причине, потому что все команды в рамках списка выполняются в текущей среде оболочки.

И если мы не хотим вводить все много раз, мы можем сделать псевдоним из него.

bash-4.3$ alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$d"; } <<<' 
bash-4.3$ pwd
/home/xieerqi
bash-4.3$ mkcd "mydir"
bash-4.3$ pwd
/home/xieerqi/mydir

Здесь я использовал "$d" переменная для обоих, но я, возможно, столь же одинаково использовал "$_":

bash-4.3$ alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$_"; } <<<'
14
ответ дан 23 November 2019 в 05:21

Функция

Можно сделать небольшую функцию, которую можно сохранить в файле ~/.bashrc. Отредактируйте файл для добавления следующих строк,

md () {
 mkdir "$1" && cd "$1"
}

Выполненный

source ~/.bashrc

чтобы внести изменение работать в текущем терминале [окно]. Новая функция будет там при открытии новых терминалов.

Используя && между командами делает cd команда, выполненная, только если mkdir команда была успешна.

Пример: Я могу использовать функцию md как это для создания тестового каталога testdir в текущем каталоге (в этом случае мой корневой каталог, как замечено от подсказки),

sudodus@xenial32 ~ $ md testdir
sudodus@xenial32 ~/testdir $ 

Сценарий оболочки Bash не работал, как я ожидал

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

Можно сохранить сценарий оболочки в каталоге ~/bin. После создания ~/bin и перезагрузка, это будет в ПУТИ.

Используйте имя, которое не используется никакой стандартной командой (например, mdscript),

#!/bin/bash

mkdir "$1" && cd "$1"

Сделайте исполняемый файл сценария

chmod ugo+x ~/bin/mdscript

Это не работает, как предназначено с

mdscript testdir

потому что текущий каталог только изменяется в подпроцессе сценария оболочки, но не в терминале [окно] после окончания сценария оболочки.

Это работает при 'получении', выполнении с командной строкой

source mdscript testdir

но это не удобно, не хороший ответ на исходный вопрос.

Вы видите, как это работает, если Вы добавляете a pwd команда в сценарий оболочки

#!/bin/bash

mkdir "$1" && cd "$1"
pwd

и запущенный скрипт mdscript

sudodus@xenial32 ~ $ mdscript testdir
/home/sudodus/testdir
sudodus@xenial32 ~ $ 
6
ответ дан 23 November 2019 в 05:21

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

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