zsh는 사용자가 디렉토리를 변경 한 후 함수를 실행하는 것을 포함하여 멋진 후크 함수를 제공합니다 chpwd
.
# zsh only
function greet() { echo 'hi'; }
chpwd_functions+=("greet")
cd .. # hi
pushd # hi
popd # hi
나는 bash에서 그것을 모방하려고합니다.
제약 사항 :
- 대화식 및 비 대화식 셸에서 모두 작동해야한다고 생각합니다.
$PROMPT_COMMAND
cd
디렉토리를 변경하는 명령 (예 :pushd
및popd
) 에서 작동하기를 원하기 때문에 재정의 할 수 없습니다.- 그것은 실행해야합니다 후 그래서, 사용자의 명령
trap "my_function" DEBUG
, 어떻게 든 거기에 말할 수없는 한,하지 작업 수행 "먼저 실행$BASH_COMMAND
한 후이 작업을 수행 갇혀 우리를 ..."내가 자동 실행을 방지 할 수 있습니다 볼의$BASH_COMMAND
경우extdebug
사용 가능 및 트랩 함수가 반환 1,하지만 난 강요 할 생각하지 않는다extdebug
, 그리고 반환1
성공 (그러나 수정) 명령하는 것은 잘못된 것 같다.
마지막 부분 인 "사용자 명령 후 실행"은 현재 저를 엉망으로 만들었습니다. 각 명령 후에 함수 를 실행할 수 있으면 마지막 확인 이후 디렉토리가 변경되었는지 확인할 수 있습니다. 예 :
function check_pwd() {
# true in a new shell (empty var) or after cd
if [ "$LAST_CHECKED_DIR" != "$PWD" ]; then
my_function
fi
LAST_CHECKED_DIR=$PWD
}
내가 올바른 길을 가고 있습니까, 아니면 더 좋은 방법이 있습니까? 사용자가 디렉토리를 변경 한 후 bash에서 명령을 어떻게 실행할 수 있습니까?
cd
원칙적으로 재정의하지 않은 것으로 명시한 오픈 소스 프로젝트에 사용됩니다 .
MYBIN=$( cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P )
에서 신뢰할 수있는 Unix 명령을 변경하지 마십시오.
bash
. 이것은 실행중인 모든 운영 체제에서 거의 동일하게 작동합니다.
cd
,pushd
그리고popd
? 디렉토리를 변경하는 방법은 몇 가지가 있습니까?