나의 마지막 줄 .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
..?
나의 마지막 줄 .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
..?
답변:
이 which
명령은 실행 파일 만 반환합니다.이 프로그램은 외부 프로그램이므로 별칭에 대해 아무 것도 모르고 자식 프로세스에 별칭 정보를 전달하는 메커니즘이 없습니다.
명령을 입력하면 type -a cp
기본 설정 순서대로 가능한 모든 해석이 표시됩니다. 때문에 이것은 별칭을 포함 type
A는 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
시작 스크립트 중 하나에서 사용자 권한으로 수행됩니다.
which
그 실행 /usr/bin/which
의 입력과 출력에서 파이프 alias
와는 일치하는 경우 별칭을 보여주기 위해 그 입력을 읽고 그것을 사용하도록 지시하는 옵션 명령. 참조 unix.stackexchange.com/questions/10525/...
which
을 지정 하여 동일한 효과를 얻을 수 있습니다 type
. 그런 다음 which -a
별명 및 함수 정의를 추가하여 외부 프로그램처럼 작동합니다. 일반적으로 별칭이나 함수 정의를 무시하고 외부 프로그램을 강제로 사용하려고 할 때 alias which=type
사용 $(which ProgName)
하고 싶기 때문에 .
ln
홈 디렉토리가와 동일한 파일 시스템에있는 경우 비 심볼 제안이 작동합니다 /usr/local/bin
. gcp
하드 링크가 여전히 이전 버전을 참조하기 때문에 업데이트하면 이상하게 작동합니다 .
gcp
, 그것은 업데이트가 개방 쓰기 또는 삭제하고 다시 작성하여 수행 여부 따라 달라집니다. 절대 링크 또는 상대 소스 경로를 사용하여 하드 링크를 작성하는지는 중요하지 않지만 심볼릭 링크에는 일반적으로 절대 경로가 필요합니다. 링크는 OS에서 광범위하게 사용되며 대부분 상징적입니다.
별명은 쉘 내부에 있습니다. 다른 프로그램은 그들에 대해 알지 못합니다.
which
Bash 내장이 아닙니다 (예 : zsh와 같은 다른 쉘에 내장되어 있음). 이후 which
강타의 별칭으로 더 특권 정보가없는, which
단지를 통해 보이는 PATH
주어진 기간 동안.
type
반면에 있다 가 별명에보고 할 수 있도록, 배쉬 내장.
PATH
.