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

6

Часто я набираю эти команды в 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
    
задан programmer5000 20.06.2017 в 21:09
источник

4 ответа

13

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

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

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

  • - это первый аргумент, который вы отправляете функции, имя каталога.

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

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

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

    
ответ дан Ravexina 20.06.2017 в 21:15
11

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

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

Из руководства по bash 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 $_

Использование структуры 'group command'

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

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

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

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 "$_"; } <<<'
    
ответ дан Sergiy Kolodyazhnyy 20.06.2017 в 21:52
9

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

    
ответ дан choroba 20.06.2017 в 21:17
6

Функции

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

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

Run

source ~/.bashrc

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

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

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

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

Файл командной строки Bash не работал, как я ожидал

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

Вы можете сохранить shellscript в каталоге ~/bin . После создания ~/bin и перезагрузки он будет в PATH.

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

#!/bin/bash

mkdir "" && cd ""

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

chmod ugo+x ~/bin/mdscript

Это не работает с

mdscript testdir

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

Он работает, когда «sourced», запускается с командной строкой

source mdscript testdir

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

Вы можете увидеть, как это работает, если вы добавите команду pwd в shellscript

#!/bin/bash

mkdir "" && cd ""
pwd

и запустите скрипт mdscript

sudodus@xenial32 ~ $ mdscript testdir
/home/sudodus/testdir
sudodus@xenial32 ~ $ 
    
ответ дан sudodus 20.06.2017 в 21:27