"which"에서 반환된 "//"은(는) 무슨 뜻인가요?

"which"에서 반환된 "//"은(는) 무슨 뜻인가요?

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어떤 식으로든 방해가 된다고 가정합니다 .

  1. 여기서 이중 슬래시는 무엇을 의미하며 여기에 나타나는 이유는 무엇입니까?
  2. 내 실행 파일이 test작동하지 않는 것 같습니다. 왜 그런 겁니까?

답변1

나는 당신 /home/sawa/foo/bar/이 가지고 있다고 추측합니다. 즉, 경로에 슬래시가 있는 경로가 있습니다.

which각 요소를 반복 하고 파일이 존재하는지 $PATH추가 하고 확인합니다. /argv[1]이로 인해 이중 슬래시가 발생합니다. 하나는 $PATH부품에서, 다른 하나는 /argv[1].

이중 슬래시는 괜찮습니다. 커널에 의해 슬래시로 축소됩니다. 이중 슬래시는 경로 시작 부분에서만 특별한 의미를 가질 수 있지만 항상 그런 것은 아닙니다.

test작동하지 않는 경우 test. 일반적으로 이 작업을 수행하려면 전체 경로를 사용하지만, bash를 사용하면 이를 사용하여 enable -n test내장 test명령을 비활성화할 수도 있습니다.

답변2

쉘 내장 기능이 실행 파일보다 실행 우선순위를 갖기 때문에 작동하지 않을 가능성이 높습니다. 의도적으로 이와 같은 이름 충돌 동작을 생성해서는 안 됩니다.~ 할 것이다환경 전반에 걸쳐 일관성이 없습니다. 시스템 바이너리는 test내장 버전이 없는 셸에서만 사용할 수 있습니다.

대체 기능을 원한다면 스크립트 이름을 다른 것으로 지정해야 합니다.

관련 정보