디렉토리를 작성하고 작업 디렉토리를 새 디렉토리로 변경하려면 어떻게해야합니까? 변경하는 방법을

단일 명령을 사용하여 디렉토리를 만들고 현재 작업 디렉토리를 새로 만든 디렉토리로 변경하는 방법을 찾고 있습니다. 어떻게해야합니까?

즉, 대신에

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명령 행은 다음라는 디렉토리를 생성합니다 foocd즉시 나중에 그것으로합니다. .bashrc변경 사항을 적용하려면 (예 : 새 콘솔을 열거 나 실행 source ~/.bashrc) 변경 사항을 다시로드해야 합니다 .

Cf. 가능한 대안도 http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time 입니다.


답변

mkdir "NewDirectory" && cd "NewDirectory"

  • 뒤에있는 부분 &&은 첫 번째 명령이 성공한 경우에만 실행됩니다.
  • Bash 매뉴얼에서 명령 목록 이라고합니다 .
  • 속기 버전도 있습니다 :

    mkdir "NewDirectory" && cd "$_"
    
  • 명령 행의 예 :

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (편집) 디렉토리에 공백이있을 수 있으므로 “를 명령에 추가하십시오.


답변

내장 함수는 없지만 쉘 기능을 사용하면 cd실행 후 명령 인수를 다시 입력하지 않아도됩니다 mkdir.

  • 이전 명령에서 마지막 인수를 삽입하려면을 입력 cd 한 다음 Esc .(또는 Alt+ .)를 입력하십시오.
  • cd !$실행 cd이전 명령의 마지막 인수에.
  • 눌러 Up, 그것은 변경 후 편집 이전의 명령 행을 불러 mkdir로를 cd.

다음에서 간단한 make-and-change-directory 함수를 정의 할 수 있습니다 ~/.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
}

답변

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 "$_"$_보유한 값이 my를 리턴 하므로 새로 작성된 디렉토리로 변경됩니다.mkdir