별칭은 PATH 항목을 "재정의"하지 않습니까?

별칭은 PATH 항목을 "재정의"하지 않습니까?

내 마지막 줄은 다음 .bash_profile과 같습니다.

alias cp=/usr/local/bin/gcp

그러나 이는 내 항목에 의해 압축되고 있습니다 $PATH.

$which cp
/bin/cp
11:54:32/OCspark $type cp
cp is aliased to `/usr/local/bin/gcp'

나는 별칭이 PATH.. ?

답변1

which명령은 실행 파일만 반환합니다. 외부 프로그램이고 별칭 정보를 하위 프로세스에 전달하는 메커니즘이 없기 때문에 별칭에 대해 아무것도 모릅니다.

명령을 입력하면 type -a cp선호하는 순서대로 가능한 모든 해석이 표시됩니다. 내부 명령 type이므로 여기에는 모든 별칭이 포함됩니다 bash.

별칭은 시스템 명령을 실행하는 옵션이 있는 스크립트나 대화형 편집기와 같은 하위 프로세스에 의해 해석되지 않는다는 점을 인식하는 것이 중요합니다.

함수를 만들면 cp다른 프로그램에서는 실행되지 않지만 버전은 스크립트에서 실행됩니다.

cp() { /usr/local/bin/gcp "$@"; }

어디에서나 작동하도록 하려면 목록 의 머리 부분에 cp추가 하고 이를 가리킵니다.$HOME/binPATH$HOME/bin/cp

ln -s /usr/local/bin/gcp $HOME/bin/cp

이렇게 하면 심볼릭 링크가 만들어지지만 좀 더 효율적인 하드 링크로 만들 수 있지만(생략 -s) 일반적으로 루트 권한( sudo ln ...)이 필요합니다. 함수 생성 및 변수 추가는 사용자 권한으로 시작 스크립트 PATH중 하나에서 수행됩니다 .bash

답변2

별칭은 셸 내부에 있습니다. 다른 프로그램에서는 이에 대해 알지 못합니다.

whichBash 내장 기능이 아닙니다(zsh와 같은 다른 쉘에는 내장 기능이 있습니다). whichBash의 별칭에 대한 특권 정보가 없으므로 주어진 용어 which만 살펴봅니다 .PATH

type, 반면에~이다Bash 내장이므로 별칭에 대해 보고할 수 있습니다.

관련 정보