모호하게 이름이 지정된 실행 파일

모호하게 이름이 지정된 실행 파일

tcsh두 개의 개별 폴더에서 실행 파일의 이름을 모호하게 지정하면 $PATH가장 최근에 생성된 폴더의 실행 파일로 연결되는 것 같습니다 . 내가 맞나요? 이것이 항상 사실인가요?

답변1

일반적으로 말해서, 발견된 순서대로 사용됩니다. $PATH왜냐하면 그것이 의도된 용도이기 때문입니다 $PATH.

이 규칙에 예외가 있을 수 있지만 이를 위해서는 소프트웨어 내의 해당 디렉토리를 사용하여 명령을 하드 코딩해야 합니다. 그러나 나는 이 접근 방식이 나쁘다고 생각합니다.

답변2

동일한 디렉터리에 동일한 이름을 가진 두 개의 파일이 있을 수 없습니다. 여러 버전이 있는 경우 하나의 버전(예: in 과 다른 버전) 이 prog있으며 환경 변수에 따라 어떤 버전이 선택되는지 결정됩니다. 이것은 쉘을 보고 있는 가족 중 한 명이 수행합니다 (아마도). 여기서는 아무 말도 하지 않습니다./usr/bin/usr/local/binPATHexec(3)PATHexecvp(3)

답변3

Solaris에는 일반적으로 동일한 이름을 가진 다른 버전의 프로그램을 포함하는 두 개의 디렉토리(실제로는 두 개 이상)가 있습니다. 예는 ps및에서 찾을 수 있습니다. 및 둘 다 에 나타나는 경우 실행되는 버전은 에 처음 나타나는 버전입니다./usr/ucb/usr/bin/usr/ucb/usr/binPATHpsPATH

답변4

모든 쉘은 디렉토리를 순서대로 탐색 $PATH하고 찾은 첫 번째 명령을 실행합니다. 예를 들어, 경로가 /usr/local/bin:/usr/bin:/bin존재하는 경우 from 명령을 실행하고, /usr/local/bin존재하지 않는 경우 from 명령을 실행합니다 /usr/bin. 명령이 설치되는 순서는 중요하지 않습니다.

한 가지 예외가 있습니다. 셸이 이미 실행 중인 동안 프로그램을 설치하는 경우 셸은 프로그램의 위치를 ​​캐시에 유지할 수 있으며, 이 경우 이전 프로그램을 계속 실행합니다. 예를 들어, tcsh를 시작하고 foo그 당시 which를 실행 /usr/bin/foo한 다음 다른 버전의 프로그램을 설치 /usr/local/bin/foo하고 해당 셸에서 다시 호출하면 foo계속 실행됩니다 /usr/bin/foo. 새로 시작된 쉘이 시작됩니다 /usr/local/bin/foo. rehashtcsh의 명령 위치 캐시를 지우려면 명령을 실행하십시오 . Bash 및 zsh에서 동등한 명령은 다음과 같습니다 hash -r(zsh에서도 이해됨 rehash).

관련 정보