경로를 지정하지 않고 내 프로그램을 실행하는 방법

경로를 지정하지 않고 내 프로그램을 실행하는 방법

내가 뭔가를 컴파일하고 다음과 같이 실행했다고 가정해 보겠습니다.

$ /path/to/my/executable/mycmd
Hello World

실행하려면 어떻게 해야 하나요?

$ mycmd
Hello World 

내 컴퓨터 어디에서나?

답변1

당신이 찾고있는 것은 PATH환경 변수입니다. 프로그램을 찾을 위치를 쉘에 알려줍니다. 다음 명령을 사용하여 이 변수의 현재 값을 볼 수 있습니다 echo.

echo "$PATH"

이제...새로운 프로그램을 사용하고 싶다면 배포판의 패키지 관리자를 사용하여 설치하는 것이 가장 좋습니다. 하지만 이 경우에는 사용 가능한 패키지에서 제공하지 않는 프로그램을 다루고 있다고 가정합니다. 이러한 유형의 프로그램에는 두 가지 옵션이 있습니다.

  1. 시스템에 설치된 위치에 시스템 전체에 프로그램을 설치합니다.아니요패키지에서 설치된 모든 파일을 배치하십시오. 대부분의 시스템에서 이러한 "안전한" 폴더에는 다음 /usr/local/bin/이 포함됩니다. /opt/bin/- 이러한 폴더는 이미 PATH.잘못된자신의 프로그램을 배치할 위치는 나열된 다른 폴더를 살펴봐야 합니다 PATH. )
  2. 변수를 수정하세요 PATH. 이는 프로그램을 저장할 수 있는 추가 폴더를 정의하고 누군가가 자신의 프로그램을 거기에 넣어 실행하도록 속일 수 있기 때문에 덜 안전합니다.

    PATH다음을 사용하여 변수를 일시적으로 수정할 수 있습니다 .

    export PATH="$PATH:/path/to/your/executable"
    

    (알아채다$PATH 뒤쪽에 =) 또는 위의 줄을 파일에 추가하여 .bashrc영구적으로 만듭니다 (를 사용한다고 가정 bash).

답변2

사용자 스크립트(또는 컴파일된 실행 파일)는 일반적으로 이 ~/bin디렉터리에 저장됩니다. 이를 통해 경로를 지정하지 않고도 실행할 수 있습니다.

그러나 설치된 패키지 및 프로그램에 의해 배치된 스크립트와 스크립트를 혼합하고 싶지 않은 경우 ~/bin선택한 디렉토리에 스크립트를 저장하고 에 바인딩할 수 있습니다 ~/bin. ~/bin경로를 지정하지 않고 간단한 이름을 사용하여 터미널에서 실행하세요.

일회성으로 이 명령을 실행할 수 있습니다(다시 시작하면 효과가 사라짐).

mkdir /home/user/.overlay
sudo mount -t overlay overlay -o lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay /home/user/bin

이 명령을 사용하여 새 스크립트를 생성하고 로그인 시 자동으로 실행하여 재부팅 후 이 바인딩을 다시 마운트할 수 있습니다.

또는

영구적으로 바인딩하려면 다음 줄을 다음에 추가하세요 fstab.

# bind my scripts to ~/bin
overlay /home/user/bin overlay defaults,lowerdir=/home/user/my-scripts-directory,upperdir=/home/user/bin,workdir=/home/user/.overlay 0 0

아래 방법은 이전에 사용해 본 적이 있지만, 제가 인지하지 못한 결함이 있습니다: ~/bin실제 폴더의 내용에 접근할 수 없게 됩니다. 그래서 나는 그것을 사용하지 않는 것이 좋습니다. 위에서 설명한 다른 방법을 찾았지만, 댓글에서 논의한 내용을 오해하지 않기 위해 이 오래된 방법은 여기에 남겨두겠습니다.

이 명령을 일회성으로 실행할 수 있습니다(재부팅 후 효과가 사라짐).
sudo mount --bind ~/my-scripts-directory ~/bin
이 명령을 사용하여 새 스크립트를 생성하고 로그인 시 자동으로 실행하여 재부팅 후 이 바인딩을 다시 마운트할 수 있습니다.
영구적으로 바인딩하려면 다음 줄을 다음에 추가하세요 fstab.
# bind my scripts to ~/bin
/home/user/my-scripts-directory /home/user/bin none bind 0 0

관련 정보