Як я можу створити каталог і змінити свій робочий каталог на новий?


18

Я шукаю спосіб створити каталог і змінити теперішній робочий каталог на новостворений каталог лише за допомогою однієї команди. Як я можу це зробити?

тобто замість того, щоб робити

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

Я хочу зробити

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

Якою може бути команда ?

Відповіді:


27

Якщо ви дійсно хочете, щоб це була лише одна команда, пропоную додати щось подібне до свого .bashrc:

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

Після введення md fooв командному рядку буде створено каталог, який викликається, fooі cdв нього відразу після цього. Майте на увазі, що вам доведеться перезавантажити свої файли, .bashrcщоб зміни набрали чинності (тобто відкрити нову консоль або запустити source ~/.bashrc).

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


19

mkdir "NewDirectory" && cd "NewDirectory"

  • Частина за &&заповітом виконується лише в тому випадку, коли перша команда буде успішною.
  • Він називається Списки команд у посібнику Bash.
  • Існує також скорочена версія:

    mkdir "NewDirectory" && cd "$_"
    
  • Приклад з командного рядка:

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


mkdir "NewDir" && cd "$_"працює чудово, ніж mkdir "NewDir" && cd "NewDir"автоматичне завершення не працює. До речі, що таке "$ _"?
TheKojuEffect

Більше того, було б досить зручно, якщо ми можемо приєднати перемикач, mkdirщоб перейти на новий створений каталог.
TheKojuEffect

@TheKojuEffect $ _ див. Gnu.org/software/bash/manual/bashref.html#Lists Щодо останнього: ніхто не заважає тобі використовувати псевдонім або функцію всередині .bashrc;)
Rinzwind

7

Для цього немає вбудованої функції, але ви можете використовувати функцію оболонки, щоб вам не довелося знову вводити аргумент 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
}

Мій +1 спеціально стосується специфічних для Баша посилань на аргументи останньої команди.
0xC0000022L

+1 для надмірної інженерії. Ексельсіор! :)
mhvelplund

3
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


це працює для мене
alhelal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.