스크립트에서 $preexec_functions에 액세스하는 방법

스크립트에서 $preexec_functions에 액세스하는 방법

일부 Zsh 함수를 스크립트로 실행하도록 변환 중인데 그 중 하나에서 (예를 들어) 의 값에 액세스해야 합니다 $preexec_functions. 함수에서는 모든 것이 잘 작동하지만 스크립트에서는 실패합니다.

스크립트에서 이 값에 액세스할 수 있습니까?

답변1

코드가 대화형 셸의 내부 데이터에 액세스하려는 경우 별도의 프로그램(스크립트)으로 실행해서는 안 되며 셸에서 해석해야 하므로 함수, 자동 로드된 함수 또는원천스크립트.

쉘 환경을 오염시키는 것을 원하지 않기 때문에 이를 스크립트로 정의하려는 경우 하위 쉘에서 실행할 수 있습니다. 사용:

myfunction() (
  ...
)

바꾸다:

myfunction() {
  ...
}

해당 정의를 귀하의 정의에 추가하고 싶지 않기 때문이라면 해당 정의를 다른 파일에 추가하고 ~/.zshrcyour()에서 해당 파일을 가져오거나 자동 로드 가능 기능을 사용하십시오.~/.zshrcsource /path/to/that/file

여전히 스크립트/별도 프로그램으로 실행하려면 해당 함수의 정의와 스크립트에 필요할 수 있는 모든 항목을 전달해야 합니다. 좋다:

CODE=$(
  typeset -p preexec_functions
  (($#preexec_functions)) && functions $preexec_functions
) your-script

그리고 your-script그랬다:

eval "$CODE"

즉, 배열의 정의와 배열이 참조하는 모든 함수를 셸 코드로 덤프하고 스크립트가 해당 코드를 동일한 배열과 함수를 선언하는 것으로 해석하도록 합니다.

관련 정보