
나는 a를 가지고 .bash_profile
있고 그 안에 일련의 별칭이 있습니다. 현재 이러한 별칭은 단일 명령만 실행하며 상당히 쉬웠습니다. 그러나 나는 만들려는 새 별칭으로 두 가지 작업을 수행하고 싶습니다.
- CD를 디렉토리에 넣기
- 해당 디렉터리에서 명령을 실행하세요.
답변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'