test
전체 경로 아래에 실행 가능한 스크립트가 있습니다 /home/sawa/foo/bar/test
. 이 디렉토리는 를 포함한 기본 디렉토리 /home/sawa/foo/bar
내에 위치하며 이 디렉토리보다 우선합니다 .$PATH
/usr/bin
`which test`
명령이 올바르게 인식되었는지 확인하려면 다음을 반환합니다.
/home/sawa/foo/bar//test
//
동일한 이름의 내장 명령이 있다는 것을 알고 있으며 test
내 명령을 제거하면 아래 명령이 /usr/bin/test
에 의해 반환되므로 which
어떤 식으로든 방해가 된다고 가정합니다 .
- 여기서 이중 슬래시는 무엇을 의미하며 여기에 나타나는 이유는 무엇입니까?
- 내 실행 파일이
test
작동하지 않는 것 같습니다. 왜 그런 겁니까?
답변1
나는 당신 /home/sawa/foo/bar/
이 가지고 있다고 추측합니다. 즉, 경로에 슬래시가 있는 경로가 있습니다.
which
각 요소를 반복 하고 파일이 존재하는지 $PATH
추가 하고 확인합니다. /argv[1]
이로 인해 이중 슬래시가 발생합니다. 하나는 $PATH
부품에서, 다른 하나는 /argv[1]
.
ㅏ이중 슬래시는 괜찮습니다. 커널에 의해 슬래시로 축소됩니다. 이중 슬래시는 경로 시작 부분에서만 특별한 의미를 가질 수 있지만 항상 그런 것은 아닙니다.
test
작동하지 않는 경우 test
. 일반적으로 이 작업을 수행하려면 전체 경로를 사용하지만, bash를 사용하면 이를 사용하여 enable -n test
내장 test
명령을 비활성화할 수도 있습니다.
답변2
쉘 내장 기능이 실행 파일보다 실행 우선순위를 갖기 때문에 작동하지 않을 가능성이 높습니다. 의도적으로 이와 같은 이름 충돌 동작을 생성해서는 안 됩니다.~ 할 것이다환경 전반에 걸쳐 일관성이 없습니다. 시스템 바이너리는 test
내장 버전이 없는 셸에서만 사용할 수 있습니다.
대체 기능을 원한다면 스크립트 이름을 다른 것으로 지정해야 합니다.