bash를 사용하여 cd 없이 파일에서 도트-슬래시(./) 별칭 실행

bash를 사용하여 cd 없이 파일에서 도트-슬래시(./) 별칭 실행

다음과 같은 디렉토리가 있습니다.

/home/user/Project/

Projectninja많은 하위 디렉터리 내부와 그 뒤에는 ./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 "$@" )
}

그리고 &&명령은cdninja./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"

관련 정보