일부 Zsh 함수를 스크립트로 실행하도록 변환 중인데 그 중 하나에서 (예를 들어) 의 값에 액세스해야 합니다 $preexec_functions
. 함수에서는 모든 것이 잘 작동하지만 스크립트에서는 실패합니다.
스크립트에서 이 값에 액세스할 수 있습니까?
답변1
코드가 대화형 셸의 내부 데이터에 액세스하려는 경우 별도의 프로그램(스크립트)으로 실행해서는 안 되며 셸에서 해석해야 하므로 함수, 자동 로드된 함수 또는원천스크립트.
쉘 환경을 오염시키는 것을 원하지 않기 때문에 이를 스크립트로 정의하려는 경우 하위 쉘에서 실행할 수 있습니다. 사용:
myfunction() (
...
)
바꾸다:
myfunction() {
...
}
해당 정의를 귀하의 정의에 추가하고 싶지 않기 때문이라면 해당 정의를 다른 파일에 추가하고 ~/.zshrc
your()에서 해당 파일을 가져오거나 자동 로드 가능 기능을 사용하십시오.~/.zshrc
source /path/to/that/file
여전히 스크립트/별도 프로그램으로 실행하려면 해당 함수의 정의와 스크립트에 필요할 수 있는 모든 항목을 전달해야 합니다. 좋다:
CODE=$(
typeset -p preexec_functions
(($#preexec_functions)) && functions $preexec_functions
) your-script
그리고 your-script
그랬다:
eval "$CODE"
즉, 배열의 정의와 배열이 참조하는 모든 함수를 셸 코드로 덤프하고 스크립트가 해당 코드를 동일한 배열과 함수를 선언하는 것으로 해석하도록 합니다.