매개변수 없이 실행하여 ~/.zshrc
리소스를 얻고 싶습니다 .
. 그래서 이거:
$ .
다음을 수행해야 합니다.
$ . ~/.zshrc
정상적인 기능은 변함없기를 바랍니다 .
. 유일한 차이점은 .
매개변수 없이 호출할 때입니다.
가능합니까?
나는 몇 가지 다른 접근 방식을 시도했습니다. 이것은 그 중 하나입니다:
dot_zshrc_or_args() {
if [[ $# == 0 ]]; then
\. ~/.zshrc
else
filename=$1
shift
\. $filename $@
fi
}
alias .=dot_zshrc_or_args
작동하지 않는 이유에 대한 예는 다음과 같습니다.
$ echo 'echo $#' > count_args.sh
$ delegate() { . ./count_args.sh }
$ delegate foo bar baz
마지막 명령은 echo 여야 3
하지만 위의 별칭이 정의된 경우 0
에코됩니다..
.
근본적인 문제는 쉘이 이를 특별히 처리하여 호출하는 스크립트가 등을 포함한 모든 지역 변수에 액세스할 수 있도록 허용한다는 것입니다 $1
. $2
따라서 다른 함수를 래핑하려고 하면 .
해당 동작이 손실됩니다(위의 예에서처럼).
마음에 떠오르는 두 가지 접근 방식은 다음과 같습니다.
- 함수 대신 별칭을 사용하세요
.
다른 함수에서 실행할 때는 사용하지 않고 대화형 셸에서만 별칭을 사용하도록 만듭니다 .
하지만 아무리 노력해도 제대로 작동할 수 없습니다. 가능합니까? (그렇지 않다면 제가 사용할 수 있는 가장 가까운 대안은 무엇입니까? 저의 궁극적인 목표는 ~/.zshrc
쉘에서 리소스를 신속하게, 가급적이면 직관적이고 기억하기 쉬운 방식으로 가져올 수 있는 것입니다.)
답변1
이것은 끔찍한 일을 함으로써 이루어질 수 있습니다 accept-line
:
function _accept-line() {
if [[ $BUFFER == "." ]]; then
BUFFER="source ~/.zshrc"
fi
zle .accept-line
}
zle -N accept-line _accept-line
답변2
필요에 따라 내장 함수를 호출 하려면 function
for 를 작성하세요 . 또한 쉘 숫자 비교에는 올바르지 않습니다( 이상하고 or가 필요함 )..
.
==
test
-eq
-ne
function . {
if [[ $# -eq 0 ]]; then
builtin . ~/.zshrc
else
builtin . "$@"
fi
}