경로의 새 디렉터리입니다.

경로의 새 디렉터리입니다.

수정하지 않고 $PATH에서 단일 실행 파일을 제거하려고 합니다.

예를 들어, 나는 해당 디렉토리에 있고 /Users/USER/Library/Python/2.7/bin/해당 디렉토리에서 제외 $PATH하고 싶습니다 services.py.

효과가 있을 거라는 건 알지만 chmod -x services.py더 나은 방법을 찾으려고 노력 중이에요

가능합니까?

답변1

파일을 하위 디렉터리로 이동할 수 있으면 파일 실행을 피할 수 있습니다.
그렇지 않은 경우 몇 가지 해결 방법이 있습니다.

피하려는 실행 파일보다 먼저 실행되도록 더 높은 우선 순위를 추가할 수 있습니다.

경로의 새 디렉터리입니다.

PATH 순서가 높은 실행 파일을 생성할 수 있습니다.

그렇다면 의 (비어 있는?) 실행 파일이 의 $PATH실행 파일보다 높은 우선 순위로 실행됩니다 ./usr/local/bin:/usr/bin:/bin/usr/bin/bin

$PATH이 방향에서는 (교체) 전에 새 실행 파일이 실행되도록 시작 부분에 경로를 추가할 수 있습니다.services.py

일부 쉘은 프로그램의 실행 경로를 기억합니다. bash의 명령으로 제어됩니다 hash(hash -r은 모든 해시를 제거합니다). 새로운 bash 쉘에는 시작 파일(보통 ~/.bashrc및/또는 ) 에서 실행되는 프로그램 외에는 해싱 프로그램이 없습니다 ~/.profile. 따라서 PATH새로운 기능을 갖춘 새로운 셸은 처음부터 작동합니다.

PATH를 변경하거나 파일을 이동할 수 없는 경우 의 함수 또는 별칭 정의를 사용하거나 ~/.bashrc다른 시작 파일을 사용할 수 있습니다 ~/.profile.

함수와 별칭은 실행 파일보다 우선순위가 높으므로 실행 파일과 같은 함수(또는 별칭)의 이름을 지정하면 해당 함수가 정의된 셸에서 효과적으로 대체됩니다.

기능

다음과 같이 간단한 작업을 수행합니다.

services.py(){ :; } # do nothing

테스트를 위해 공백으로 설정할 수 있습니다 ls.

ls(){ :; }

삭제 기능을 사용할 수 있습니다 unset -f FunctionName.

 $ unset -f ls

ls기능을 제거하세요.

함수는 완벽하지 않으며 원래 실행 파일은 전체 경로로 호출될 수 있습니다.

$ /bin/ls
listOfFiles

이 기능은 "이 쉘"이 ​​프로그램을 실행하는 것을 방지할 뿐입니다. 다른 셸(또는 execve자체적으로 호출할 수 있는 프로그램)은 실행 파일을 실행합니다.

별명

별칭은 덜 강력하며 간단한 명령의 첫 번째 단어만 대체합니다.
명령에 어떤 형태의 참조가 있으면 별칭을 사용하지 않습니다.

$ alias ls='echo "none"'
$ ls
none
$ \ls
ListOfFiles

별칭 삭제를 사용할 수 있습니다 unalias AliasName. 따라서 다음과 같습니다.

 $ unalias ls

별칭 정의가 삭제됩니다 ls.

PATH를 변경하는 가장 안정적인 방법입니다. 새 디렉토리를 사전 설정하거나 파일을 새 디렉토리로 이동합니다. $PATH프로그램 실행이 허용된 인스턴스에만 이러한 디렉터리를 포함합니다.

관련 정보