다음과 같은 디렉토리가 있습니다.
/home/user/Project/
Project
ninja
많은 하위 디렉터리 내부와 그 뒤에는 ./ninja
.
/home/user/Project/sub1/sub2/sub3/ninja
물론 그냥 cd
뛰어들어 Project
할 수도 있었습니다 ./ninja
. 그러나 bashrc를 통해 명령을 실행하기 위해 별칭을 작성하고 있습니다.
alias runNinja = cd ~/Project/sub1/sub2/sub3 && ./ninja
1개의 명령으로 할 수 있나요?
alias runNinja = .~/Project/sub1/sub2/sub3/ninja
위의 내용은 분명히 작동하지 않습니다.
alias runNinja = ./home/user/Project/sub1/sub2/sub3/ninja
TL, DR: 디렉토리에서 스크립트를 실행하기 위해 별칭을 줄이는 방법은 무엇입니까?
답변1
오직추가의.bashrc의 $PATH 변수 경로는 다음과 같습니다.
export PATH=$PATH:/home/user/Project/sub1/sub2/sub3
./ 없이도 원하는 곳 어디에서나 실행할 수 있습니다.
$ ninja
하지만 물론 별칭을 설정할 수도 있습니다.
alias runNinja='/home/user/Project/sub1/sub2/sub3/ninja'
어디에서나 실행할 수 있습니다.
$ runNinja
의도적으로 런타임에 해당 디렉터리로 이동하려는 경우(예: 해당 디렉터리의 파일이나 종속성을 입력/출력으로 처리하는 경우) ~/.bashrc 파일 또는 구성 파일에 아래와 같은 함수를 작성해야 합니다. :
runNinja() { cd /home/user/Project/sub1/sub2/sub3 && ./ninja "$@" }
답변2
별칭은 bash
다음과 같이 작성됩니다.
alias ninja="$HOME/Project/sub1/sub2/sub3/ninja"
(주위에 공백이 없습니다 =
).
또한 $HOME
여기서는 별칭을 정의할 때 홈 디렉터리 경로로 확장되는 변수를 사용했습니다.
대신 셸 함수를 사용하세요.
ninja () {
"$HOME/Project/sub1/sub2/sub3/ninja" "$@"
}
"$@"
명령줄에 제공할 수 있는 모든 인수로 확장 됩니다 .
만약 너라면필요현재 디렉터리를 $HOME/Project/sub1/sub2/sub3
실행 전 으로 변경하려면 ./ninja
함수에서 이 작업을 수행할 수도 있습니다.
ninja () (
cd "$HOME/Project/sub1/sub2/sub3" &&
./ninja "$@"
)
함수 본문을 서브셸( (...)
)에 넣었다는 점에 유의하세요. 이는 cd
현재 디렉토리가 변경되지 않음을 의미합니다.현재의쉘이지만 함수 환경에서만 사용할 수 있습니다.
분명히 다음과 같이 쓸 수 있습니다.
ninja () {
( cd "$HOME/Project/sub1/sub2/sub3" && ./ninja "$@" )
}
그리고 &&
명령은cd
ninja
./ninja
아니요실패하면 실행합니다 cd
.
셸 함수는 일반적으로 별칭을 추가하는 모든 위치(아마도 ~/.bashrc
)에서 선언할 수 있습니다.
답변3
당신은 너무 가깝습니다. 그러나 이는 .
명령이 아니며 파일 이름의 일부입니다.
이 파일은 .
모든 디렉터리에 위치하며 해당 디렉터리와 동일한 디렉터리입니다. cd ././././././
그것은 당신에게 아무것도 남기지 않을 것입니다. $PWD
, .
, ./.
, ././.
은 모두 동일한 디렉토리입니다.
따라서 /home/user/Project/sub1/sub2/sub3/ninja
입력한 명령을 실행하려면 /home/user/Project/sub1/sub2/sub3/ninja
별칭을 만들어야 합니다.
alias ninja="/home/user/Project/sub1/sub2/sub3/ninja"