
아래와 같은 파일 위치에 있는 동안 실행할 수 있는 응용 프로그램이 있습니다.
-$ cd home/myApps/app
-$ ./run.sh
전체 경로에 있지 않고 터미널의 어느 곳에서나 run.sh를 호출하고 싶습니다. alais를 사용하고 bashrc 파일에 아래 코드를 추가하려고 했습니다.
alias mylovleyapp=/home/myApps/app/run.sh
문제는 mylovleyapp을 사용하여 앱을 실행하려고 할 때마다 run.sh가 myApps 폴더의 다른 파일에 의존하기 때문에 프로그램이 오류를 반환한다는 것입니다.
어떻게 하면 달성할 수 있나요?
답변1
로마로 가는 방법은 여러 가지가 있습니다.
별명
별칭을 선호하는 경우 다음과 같이 할 수 있습니다.
alias mylovleyapp='(cd home/myApps/app && ./run.sh)'
중괄호를 사용 (...)
하면 두 명령이 하위 쉘에서 실행됩니다. 따라서 프로그램이 종료된 후에도 현재 디렉터리는 변경되지 않습니다.
PATH의 래퍼 스크립트
대신, 래퍼 스크립트를 생성하여 검색에 있는 폴더에 배치할 수 있습니다 PATH
(예: 액세스가 필요한 유일한 사용자이거나 ~/.local/bin
모든 사용자가 액세스가 필요한 경우). 그런 다음 프로그램을 시작하기 위해 스크립트 이름을 입력하기만 하면 됩니다.~/bin
/usr/local/bin
스크립트는 프로그램을 시작하기 위해 일반적으로 수행하는 것과 동일할 수 있습니다.
#!/usr/bin/env bash
cd home/myApps/app
./run.sh
예를 들어 해당 스크립트를 ~/.local/bin/mylovleyapp
. 실행할 수 있도록 스크립트를 실행 가능하게 만듭니다.
chmod +x ~/.local/bin/mylovleyapp
~/.local/bin
존재하지 않아서 만들어야 하는 경우 로그아웃했다가 다시 로그인하면 자동 으로 PATH
. 이제부터는 mylovleyapp
터미널에 입력하기만 하면 앱이 실행됩니다.
답변2
OP가 샘플 스크립트를 제공하지 않았기 때문에 하나 만들겠습니다. 그것은 한 가지 일을 할 것입니다. ls
스크립트의 디렉터리에서 실행합니다 .
ls
예 ,./
. 하지만 이 예에서는 스크립트의 현재 디렉터리를 사용하는 스크립트를 시연하는 데 필요한 것으로 가정합니다.
#!/usr/bin/env bash
ls ./
해당 스크립트를 어딘가에 저장하세요. 로 저장하겠습니다 /home/ubuntu/test/myscript
. 으로 실행 가능하게 만드세요 chmod +x /home/ubuntu/test/myscript
. 이제 cd
스크립트가 있는 디렉토리(예: cd /home/ubuntu/test
)로 이동하여 다음을 사용하여 스크립트를 실행합니다 ./myscript
.
ubuntu@computer:~/test$ ./myscript
myscript someRandomFile
여태까지는 그런대로 잘됐다. 하지만 이제 다른 디렉터리에서 실행해 보겠습니다. 이 예에서는 루트 디렉터리( )에서 실행하겠습니다 /
.
ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin dev home lib lib64 lost+found mnt proc run snap sys usr
boot etc init lib32 libx32 media opt root sbin srv tmp var
이런. 우리는 사용자 위치가 아닌 스크립트 위치에서 파일을 인쇄하기를 원했습니다. 해결책을 찾기 전에 다음을 생각해 보세요.왜잠시 동안 이 일을 합니다. 대답은 간단합니다. ./
에 상대적이다사용자의스크립트의 디렉터리가 아닌 현재 디렉터리입니다.
스크립트 내부에서 스크립트의 디렉토리를 얻으려면 다음을 살펴보겠습니다.이 스택 오버플로 질문.
요점은 간단합니다. script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
스크립트의 현재 디렉토리를 가져와서 변수에 저장합니다 script_dir
.
이에 따라 스크립트를 업데이트해 보겠습니다. 이제 우리의 스크립트는 다음과 같습니다:
#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"
실행하고 작동하는지 확인해 봅시다:
ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile
효과가있다! 스크립트와 동일한 디렉터리에 있지 않더라도 스크립트 디렉터리에 있는 파일을 인쇄합니다. 완료되었습니다. 전체적인 아이디어는 간단합니다. 스크립트에서는 ./
사용자의 디렉터리를 나타냅니다. "$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
스크립트가 있는 디렉토리를 나타냅니다. 이에 따라 스크립트를 업데이트하면 제대로 작동합니다.
답변3
PATH 변수에 앱 경로를 추가해야 합니다. 일시적으로 이를 수행하려면 앱이 있는 디렉토리로 이동한 후 다음을 수행하십시오.
PATH=.:$PATH
이제 전체 경로를 입력하지 않고도 어디서나 앱을 호출할 수 있습니다. 터미널을 닫으면 이 설정이 손실됩니다.
영구적으로 설정하려면 .bashrc 파일을 편집하고 PATH 끝에 :/home/myApps/app을 추가해야 합니다. 새 .bashrc 파일을 저장한 후 다음을 수행합니다.
source .bashrc
답변4
따라서 작업 디렉터리를 대상 응용 프로그램이 있는 디렉터리로 변경한 다음 종속 파일을 찾을 수 있도록 응용 프로그램을 실행해야 합니다.
별칭에 두 개의 개별 명령을 제공하여 이를 수행할 수 있다고 생각합니다. 하나는 디렉토리를 변경하고 다른 하나는 프로그램을 실행하며 세미콜론으로 구분됩니다.
따라서 .bashrc
추가 내용은 다음과 같아야 합니다.
alias mylovleyapp='cd /home/myApps/app; ./run.sh'
이는 종속 파일이 다음 위치에 있다고 가정합니다 /home/myApps/app
. 그렇지 않은 경우 작업 디렉터리를 종속 파일이 있는 디렉터리로 변경한 다음 절대 경로를 두 번째 구성 요소로 사용하여 앱을 실행할 수 있습니다.