나는 git checkout을 위한 ksh 함수를 작성했습니다. (이것이 왜 나에게 적합한지 궁금하시다면 홍보를 위해 일부 관련 없는 독점 구성요소를 제거했습니다.)
# Checkout quicker
checkout(){
if [ "$1" == "master" ]; then
git checkout master
else
git checkout $1
fi
}
그러나 명령줄을 사용하여 함수를 보면 functions
이상한 결과가 나타납니다.
$ functions checkout
checkout()
}
# Checkout quicker
checkout(){
if [ "$1" == "master" ]; then
git checkout master
else
$ <- (this is my PS1, which I'm not writing here because it's big)
기능이 비정상적으로 표시되는 이유는 무엇입니까? functions
함수 내부에 함수 이름을 사용하여 기술적으로 문제를 해결하고 있나요 ? RHEL에서 ksh93u+ 2012-08-01을 사용하고 있습니다.
답변1
나중에 수정될 버그가 발생한 것 같습니다.이번에 제출하세요. CentOS 7에서 ksh93을 사용하여 재현할 수 있습니다.
$ cat a
# Checkout quicker
checkout(){
if [ "$1" == "master" ]; then
git checkout master
else
git checkout $1
fi
}
$ . ./a
$ functions checkout
checkout(){
if [ "$1" == "master" ]; then
git checkout master
else
git checkout $1
fi
}
$ vi a
함수의 원본 파일을 편집하고 함수 정의 앞에 텍스트를 추가합니다. 지금:
$ cat a
01234567801234567890123456789
}
# Checkout quicker
checkout(){
if [ "$1" == "master" ]; then
git checkout master
else
git checkout $1
fi
}
$ functions checkout
checkout()
}
# Checkout quicker
checkout(){
if [ "$1" == "master" ]; then
git checkout mast$
커밋 로그 인용:
[v1.1]
typeset -f <functname>
: 빌드 스크립트 사용sh_deparse()
문제 재현:
- 함수 정의가 포함된 스크립트 찾기 또는 작성
.
스크립트 사용 또는 가져오기source
typeset -f
괜찮아 보이는 함수 정의를 인쇄하려면 ; 을 사용하세요.- 파일을 편집하여 함수 정의 앞이나 안에 문자를 추가 또는 제거하거나 파일 이름을 바꾸거나 삭제합니다.
- 인쇄 기능 정의가 다시
typeset -f
손상되었습니다.원인: ksh는 소스 파일에 있는 함수 정의의 오프셋과 길이를 기억하고 소스 파일에 있는 해당 오프셋의 바이트 수를 덤프하여 함수 정의를 인쇄합니다. 파일을 편집하거나 (재)이동하면 이는 분명히 중단되므로 이 접근 방식은 근본적으로 결함이 있으므로 교체해야 합니다.