내 마지막 줄은 다음 .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/bin
PATH
$HOME/bin/cp
ln -s /usr/local/bin/gcp $HOME/bin/cp
이렇게 하면 심볼릭 링크가 만들어지지만 좀 더 효율적인 하드 링크로 만들 수 있지만(생략 -s
) 일반적으로 루트 권한( sudo ln ...
)이 필요합니다. 함수 생성 및 변수 추가는 사용자 권한으로 시작 스크립트 PATH
중 하나에서 수행됩니다 .bash
답변2
별칭은 셸 내부에 있습니다. 다른 프로그램에서는 이에 대해 알지 못합니다.
which
Bash 내장 기능이 아닙니다(zsh와 같은 다른 쉘에는 내장 기능이 있습니다). which
Bash의 별칭에 대한 특권 정보가 없으므로 주어진 용어 which
만 살펴봅니다 .PATH
type
, 반면에~이다Bash 내장이므로 별칭에 대해 보고할 수 있습니다.