여러 번 설치하는 경우 어떤 바이너리가 실행되나요?

여러 번 설치하는 경우 어떤 바이너리가 실행되나요?

gsettings를 설정하고 싶어서 /usr/bin/gsettings별칭을 만들었습니다. 하지만 이것이 작동하는지 확실하지 않습니다.

$ type gsettings
gsettings is aliased to `/usr/bin/gsettings'
gsettings is /home/linuxbrew/.linuxbrew/bin/gsettings
gsettings is /usr/bin/gsettings

$ which gsettings
/home/linuxbrew/.linuxbrew/bin/gsettings

또 다른 예는 다음과 같습니다.

$ type pandoc
pandoc is aliased to `/usr/bin/pandoc'
pandoc is /home/linuxbrew/.linuxbrew/bin/pandoc
pandoc is /usr/bin/pandoc
pandoc is /home/nikhil/.cabal/bin/pandoc

$ which pandoc
/home/linuxbrew/.linuxbrew/bin/pandoc

질문

  1. bash에 입력할 pandoc때 pandoc 및 gsettings의 어떤 바이너리가 실행되는지 누군가가 명확히 할 수 있습니까?gsettings

  2. 명령 출력 순서가 type의미가 있나요?

노트

$ type type
type is a function
type () 
{ 
    builtin type -a "$@"
}
type is a shell builtin

답변1

예, 순서가 중요합니다. 출력의 첫 번째 항목이 type실행될 항목입니다. 따라서 귀하의 경우 pandoc별칭이 실행되고 /usr/bin/pandoc작동 gsettings합니다 /usr/bin/gsettings.

실제로 이 동작이 문서화된 위치를 찾을 수 없습니다. 명시된 첫 번째 결과가 type -a실행될 항목이지만, 별칭을 설정 해제한 다음 재설정하면 해당 동작을 볼 수 있습니다. 예를 들면 다음과 같습니다.

$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /usr/bin/ls

$ unalias ls
$ type -a ls
ls is /sbin/ls
ls is /usr/bin/ls

$ alias ls='ls --color=tty'
$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /usr/bin/ls

보시다시피 별칭을 다시 추가하면 처음으로 돌아갑니다. 비교:

$ touch ~/bin/ls; chmod 755 ~/bin/ls
$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /home/terdon/bin/ls
ls is /usr/bin/ls

~/bin/ls별칭 뒤(별칭은 항상 우선순위를 가짐), 이후 /sbin/ls및 이전에 표시되는 새로운 가짜 명령을 추가했습니다 /usr/bin/ls. 이것이 바로 실행 순서입니다. my 에서 디렉터리 순서를 검사하면 확인할 수 있습니다 $PATH.

$ echo "$PATH"
/sbin:/usr/sbin:/home/terdon/bin:/usr/local/bin:/usr/local/sbin:/usr/bin

/home/terdon/bin전후 /sbin상황 /usr/bin과 이 순서가 출력에 어떻게 반영되는지 확인하세요 type.

마지막으로 어느 것이 실행될지 아는 가장 쉬운 방법은 type다음을 실행하는 것 입니다 -a.

$ type ls
ls is aliased to `ls --color=tty'

항상 하나의 항목만 반환하며, 이 항목은 이 명령을 사용할 때 실행됩니다.

관련 정보