이상한 bash 스크립트 동작

이상한 bash 스크립트 동작

나는 바이너리가 동일하고 동일한 권한을 가지며 내 드라이브에서 고유하고 sudoers여전히 하나는 루트에 대한 uid 테스트를 통과하고 다른 하나는 통과하지 못하는 두 개의 bash 스크립트를 가지고 있습니다. ./bin 폴더의 첫 번째 항목을 호출 하면 두 번째 항목처럼 동작합니다.

스크립트(동기화-사무엘):

#!/usr/bin/env bash

echo "[$0]"
whoami

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root"
    exit 1
fi

id -u
exit

산출:

samuel@xeon:~$ sync-samuel
[sudo] password for samuel: 
[/home/samuel/bin/sync-samuel]
root
0
samuel@xeon:~$ sync-samuel2
[/home/samuel/bin/sync-samuel2]
samuel
This script must be run as root
samuel@xeon:~$ cd bin
samuel@xeon:~/bin$ ./sync-samuel
[./sync-samuel]
samuel
This script must be run as root

권한:

-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:36 sync-samuel
-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:37 sync-samuel2

문서:

samuel@xeon:~/bin$ file sync-samuel
sync-samuel: a /usr/bin/env bash script, ASCII text executable
samuel@xeon:~/bin$ file sync-samuel2
sync-samuel2: a /usr/bin/env bash script, ASCII text executable

이 동작을 유발하는 요인이 무엇인지 또는 이 두 파일의 확장 속성을 볼 수 있는 방법을 아는 사람이 있습니까? 저는 bash 4.3.11(1) 릴리스와 함께 Lubuntu 14.04 LTS를 사용하고 있습니다.

편집자: G-Man은 남자예요! 첫 번째 것도 별칭입니다.

samuel@xeon:~/bin$ type sync-samuel2
sync-samuel2 is hashed (/home/samuel/bin/sync-samuel2)
samuel@xeon:~/bin$ type sync-samuel
sync-samuel is aliased to `sudo /home/samuel/bin/sync-samuel'

답변1

실행 중이 아니고 스크립트 자체가 호출되지 않은 경우에도 프롬프트가 표시 sync-samuel되는 것으로 출력 됩니다 . 이는 의미가 없습니다. 입력할 때 질문에 표시된 스크립트가 아닌 다른 것을 실행하는 것 같습니다 .sudosudosudosync-samuelsync-samuel

이는 sync-samuel실제로 별칭 sudo sync-samuel이나 이와 유사한 것일 수 있습니다. 또 다른 가능성은 sync-samuel 다른 디렉토리에 또 다른 복사본이 있고 쉘이 보고 있는 복사본 대신 이를 찾고 실행하는 것입니다. 이 문제를 진단하려면 다음 명령을 실행하십시오.

type sync-samuel sync-samuel2

type쉘이 각 명령을 해석하는 방법을 보여주는 내장 명령입니다. 두 파일에 대해 상당히 다른 응답을 받는 경우(예: sync-samuel별칭 대신 sync-samuel2) ​​동일한 처리를 받도록 진행하는 방법(예: sync-samuel2별칭도 정의)을 알게 됩니다.

관련 정보