실행 가능한 프로그램을 만들고 해당 디렉토리를 경로에 추가했습니다. 여전히 실행되지 않습니다. 무엇을 제공합니까?

실행 가능한 프로그램을 만들고 해당 디렉토리를 경로에 추가했습니다. 여전히 실행되지 않습니다. 무엇을 제공합니까?

나는 시도했다:

gaspipe@kali:~/bashscripts$ ls
./  ../  addpath*  autoinstaller

gaspipe@kali:~/bashscripts$ cd ..

gaspipe@kali:~$ addpath
addpath: command not found

gaspipe@kali:~$ addpath*
addpath*: command not found

gaspipe@kali:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

환경 변수 man 과 관련된 문제는 PATHLinux에서 이보다 더 어려운 것은 없으며 매우 간단한 개념입니다. 그러나 경로에 디렉터리를 추가하는 스크립트를 만드는 것만으로도 나에게는 힘든 일이다.
계속해서 파일을 열고 긴 경로 이름을 입력하고 싶지 않습니다 ~/.bashrc. 그냥 입력 addpath <dir>하고 끝내고 싶습니다 .

왜 이것이 확립된 절차가 아닌가?

답변1

로컬 폴더는 /usr/games 디렉터리와 분리되어 있지 않습니다.

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

그것은해야한다:

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games:/home/gaspipe/bashscripts

(차이점을 더 명확하게 하기 위해 PATH의 시작 부분을 잘라냈습니다.)

답변2

현재 쉘 환경을 조작하기 위한 스크립트를 원하는 경우 다음 스크립트를 얻어야 합니다.

source ./addpath

또는

. ./addpath

addpath또는 셸 함수나 별칭을 만들 수 있습니다 .

일반적인 방법으로 스크립트를 실행하면 현재 셸은 현재 셸 환경의 복사본을 사용하여 스크립트를 실행하기 위한 새 프로세스를 만듭니다. 스크립트는 복사본을 수정한 후 스크립트가 끝나면 프로세스가 종료되고 수정된 환경이 손실됩니다.

반면에 셸 함수와 별칭은 현재 셸에서 실행되므로 명령줄 세션의 환경을 쉽게 수정할 수 있습니다.

답변3

샘플 스크립트가 있습니다.

$ cd ~/bin
$ cat example
#!/bin/bash
echo Hello

source이것을 실행하려면 telcoM의 답변처럼 할 수 있습니다 .

$ source example
Hello

그러나 직접 실행할 수 있도록 실행 권한을 추가하겠습니다.

$ ls -l
-rw-r--r-- 1 stew stew 23 Feb 12 10:15 example
$ chmod +x example
$ ls -l
-rwxr-xr-x 1 stew stew 23 Feb 12 10:15 example

이제 절대 또는 상대 경로를 참조하여 스크립트를 호출할 수 있습니다.

$ ./example
Hello
$ ~/bin/example
Hello

이 명령을 자주 실행하지 않으려는 경우 일반적으로 이것으로 충분합니다. 그러나 파일을 자주 실행하는 경우 위치를 지정하지 않고 실행 파일을 실행하는 것이 좋습니다.

$PATH일반적으로 나는 이 스크립트를 이미 지정된 위치(예:)에 배치합니다 /usr/local/bin. 모든 사용자 정의 스크립트가 동일한 위치에 있고 모든 사용자가 사용할 수 있기 때문에 이를 통해 정리된 상태를 유지하는 데 도움이 됩니다.

어떤 경우에는 사용자별 스크립트를 포함하고 싶은 경우가 있는데, $HOME/bin이 경우 해당 디렉터리를 $PATH환경 변수에 추가해야 합니다.

PATH현재 명령에 임시로 디렉터리를 연결할 수 있습니다.

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ PATH=$PATH:~/bin example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

아직 디렉터리 경로를 입력하고 있기 때문에 이는 별로 유용하지 않습니다. 환경 변수를 통해 단일 실행에 대한 옵션을 설정하는 데 가장 유용합니다.

더 오래 지속되기를 원한다면(아마도 이 셸 세션에서 명령을 여러 번 실행하고 싶을 수도 있음) 셸에 대해 설정할 수 있습니다.

$ PATH=$PATH:~/bin
$ example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:~/bin

이는 다음 10분 동안 명령을 여러 번 사용한 후 다시는 사용하지 않을 경우에 유용합니다. 그러나 새 터미널이 시작되면 이 변경 사항은 손실됩니다.

를 사용한다고 가정하면 bashbash가 시작될 때 자동으로 설정하여 세션 간에 이 변경 사항이 유지되도록 할 수 있습니다. 다음 명령은 bashrc새 인스턴스가 시작될 때마다 실행되는 사용자 디렉터리에 내 디렉터리를 추가합니다.bash

$ echo 'PATH=$PATH:~/bin` >> ~/.bashrc

이제 새 쉘을 시작할 때마다 내 디렉토리에 포함되며 PATH경로를 지정하지 않고도 호출할 수 있습니다. example이는 시스템의 다른 사용자에게 영향을 미치지 않습니다.

$ example
Hello

:특정 질문에서 가장 큰 실수는 $PATH기존 디렉토리와 사용자 정의 디렉토리 사이에 콜론을 추가하지 않는 것입니다.

관련 정보