디렉토리의 CD에 별칭을 지정하고 명령을 호출합니다.

디렉토리의 CD에 별칭을 지정하고 명령을 호출합니다.

나는 a를 가지고 .bash_profile있고 그 안에 일련의 별칭이 있습니다. 현재 이러한 별칭은 단일 명령만 실행하며 상당히 쉬웠습니다. 그러나 나는 만들려는 새 별칭으로 두 가지 작업을 수행하고 싶습니다.

  1. CD를 디렉토리에 넣기
  2. 해당 디렉터리에서 명령을 실행하세요.

답변1

특정 작업 디렉토리로 명령을 실행하려면 일반적으로 다음을 수행합니다.

( cd directory && utility )

주위의 괄호는 cd ...그 안에 있는 명령이 하위 쉘에서 실행된다는 것을 의미합니다. 서브쉘에서 작업 디렉토리를 변경하면 호출 쉘의 현재 작업 디렉토리가 변경되지 않습니다. 즉, 이 명령을 호출한 후에도 시작했던 디렉토리에 여전히 위치하게 됩니다.

예:

( cd / && echo "$PWD" )  # will output "/"
echo "$PWD"              # will output whatever directory you were in at the start

별칭은 인수를 사용할 수 없으므로 일반 별칭으로 전환할 수 없습니다.

에 대한특정한디렉토리와 유틸리티, 누구나 할 수 있는 일

alias cdrun='( cd "$HOME/somedir" && ./script.sh )'

그러나 일반적인 경우에는 쉘 함수를 사용해야 합니다:

cdrun () {
    ( cd "$1" && shift && command "$@" )
}

또는

cdrun () (
    cd "$1" && shift && command "$@"
)

함수 본문 주위의 중괄호를 괄호로 바꾸면 함수가 자체 하위 쉘에서 실행됩니다.

이것은 다음과 같이 사용됩니다.

$ cdrun "$HOME/somedir" ./script.sh

작업 디렉토리로 디렉토리 script.sh에 있는 스크립트를 실행하거나$HOME/somedir$HOME/somedir

$ cdrun / ls -l

루트 디렉토리의 "긴 형식"으로 디렉토리 목록을 제공합니다.

쉘 함수는 첫 번째 인수를 취하고 해당 디렉토리로 변경을 시도합니다. 이것이 작동하면 위치 매개변수(명령줄 인수 목록)에서 디렉터리 이름을 이동하고 나머지 인수에서 제공하는 명령을 실행합니다. command단순히 인수를 명령으로 실행하는 셸에 내장된 명령입니다.


명령을 실행하려면 이 모든 것이 필요합니다.변경된 작업 디렉토리로. 다른 곳에 있는 명령을 실행하고 싶다면 분명히 다음을 사용할 수 있습니다.

alias thing='$HOME/somedir/script.sh'

script.sh하지만 이것은$HOME/somedir현재의디렉토리를 작업 디렉토리로 사용합니다.

작업 디렉토리를 변경하지 않고 다른 곳에 있는 스크립트를 실행하는 또 다른 방법은 스크립트 위치를 PATH환경 변수에 추가하는 것입니다.

PATH="$PATH:$HOME/somedir"

이제 다음을 사용하여 어디에서나 실행할 수 있습니다 script.sh.$HOME/somedir

$ script.sh

다시 말하지만, 이것은~ 아니다명령의 작업 디렉토리를 변경하십시오.

답변2

alias <name-of-the-alias>='cd <the-directory> && <command>'

/var/log/따라서 디렉터리(cd)를 폴더로 변경한 다음 해당 파일을 나열(ls) 하려면 .bash_profile파일에 다음을 추가할 수 있습니다.

alias logs='cd /var/log/ && ls'

답변3

이 함수를 사용하여 다른 디렉터리에서 단일 명령을 실행합니다.

cd1 () {
  if [ $# -eq 1 ]; then
    command cd -- "$1"
  else
    ( command cd -- "$1" && shift && "$@" )
  fi
}

이 기능의 제한 사항은 명령이 실행되는 디렉터리가 아닌 원래 디렉터리를 기준으로 와일드카드가 완성된다는 것입니다.zsh에서 더 잘할 수 있습니다.

이 함수는 단일 인수로 호출되는 경우 일반 함수처럼 작동하므로 cd호출할 수 있습니다 cd. (이 기능은 옵션을 지원하지 않지만, 옵션은 cd거의 사용되지 않습니다.)

답변4

세미콜론으로 명령을 구분하세요. 예:

alias do_something='cd /tmp; ls'

관련 정보