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

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

일련의 별칭이 있는 것이 있습니다 .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'

관련 정보