이것은 내 파일의 일부입니다 .bashrc
.
echo_pwd () {
echo `pwd`
}
export echo_pwd="`echo_pwd`/"
echo_pwd
현재 디렉터리의 경로와 슬래시가 뒤에 오는 현재 디렉터리를 포함하는 새 환경 변수를 인쇄하는 새 함수를 만들었습니다 . 따라서 명령줄에서 환경 변수(예 $PWD
: )를 사용할 수 있습니다.
그러나 이 환경 변수는 올바르게 확장되지 않으며 항상 내 홈 디렉터리를 참조합니다.
~/Documents$ env | grep echo_pwd
echo_pwd=/home/pierre/
~/Documents$
환경 변수를 올바르게 확장하려면 어떻게 해야 합니까?
참고: 이는 분명히 더미 예제입니다. 내 특정 사용 사례에서는 이것이 echo_pwd
더 복잡한 기능입니다.
답변1
함수를 실행하고 변수 값을 한 번만 설정할 수 있습니다.
사용 시 변수 값을 자동으로 업데이트하려면 다음과 같이 cd
셸의 내장 함수를 재정의할 수 있습니다 .cd
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
cd
이는 함수에 제공한 모든 인수를 사용하여 내장 함수를 호출 cd
한 다음 변수 값을 업데이트합니다( export
다른 곳으로 내보냈거나 전혀 내보내야 하는 경우에는 필요하지 않음).
전체 설정은 다음과 같습니다.
echo_pwd () {
printf '%s\n' "$PWD" # or just: pwd
}
export echo_pwd="$( echo_pwd )/"
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
나는 선택했다사용printf
$PWD
유틸리티 에 전화하는 대신 pwd
나도명령 $(...)
대체용.
답변2
에서는 export echo_pwd="`echo_pwd`/"
변수 설정 시 명령 대체가 한 번만 수행됩니다.
변수 값을 업데이트해야 하는 경우 다시 설정해야 합니다.
대화형 bash에서는 다음을 사용할 수 있습니다.PROMPT_COMMAND
, 프롬프트가 인쇄될 때마다 실행됩니다.
$ PROMPT_COMMAND='echo_pwd="`echo_pwd`/"'
$ cd bar/
$ echo $echo_pwd/
/tmp/foo/bar//
$ cd baz
$ echo $echo_pwd
/tmp/foo/bar/baz/