gnome 터미널을 열고 사용자 정의 zsh 명령을 실행하십시오.

gnome 터미널을 열고 사용자 정의 zsh 명령을 실행하십시오.

터미널을 열고 my 를 실행하는 명령을 원합니다 aliases.zsh. 함수는 다음과 같이 정의됩니다.

my-function() {
  wget some stuff
  do some other stuff
}

시도해 보았 gnome-terminal -- my-function으나 새 터미널에서 이를 보고합니다 Failed to execute child process “my-function” (No such file or directory). 이렇게 하면 비슷한 일이 발생합니다 gnome-terminal -- /bin/zsh -c 'my-function; sleep 1; exec zsh'. 새 터미널에서 zsh가 zsh:1: command not found: my-function.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

~/.zshrc대화형으로 호출되는 사용자 정의 파일입니다 zsh.

zsh -c 'some code'인라인 스크립트입니다. #! /bin/zsh -shebang 으로 시작하는 스크립트와 마찬가지로 운 좋게도 ~/.zshrc시작할 때 가져오지 않습니다. 그렇다면 표준 명령의 동작을 변경하는 별칭/함수가 있는 경우(흔하지 않은 일입니다 alias 'ls=ls --color -F' 'grep=grep --color;...) zsh 스크립트가 손상될 수 있습니다.

~/.zshrc스크립트 또는 ~/.zprofile를 로드하려면 /etc/zsh/zshrc명시적으로 요청해야 합니다. 하지만 가장 좋은 방법은 이러한 함수를 일부 함수에 넣고 ~/.zsh/some-library.zsh이를 필요한 스크립트와 스크립트에 넣거나 프레임워크를 ~/.zshrc사용하는 것입니다 .autoload

gnome-terminal -- zsh -c '. ~/.zsh/some-library.zsh; myfunction'

대화형 zsh를 시작하고 싶지만 gnome-terminal첫 번째 프롬프트를 표시하기 전에 먼저 함수를 실행하려면 다음을 추가할 수 있습니다.

eval -- $ZSH_INIT_COMMAND
unset ZSH_INIT_COMMAND

끝까지 ~/.zshrc다음을 실행하십시오 gnome-terminal.

gnome-terminal -- env ZSH_INIT_COMMAND='myfunction; echo and whatever else' zsh

또는 프롬프트에서 작성하는 것처럼 시작하여 같은 방식으로 처리할 수 있도록 하려면 다음과 같이 변경하세요.

if (( $+ZLE_INIT )); then
  seed-zle() {
    BUFFER=$ZLE_INIT
    unset ZLE_INIT
    zle -D zle-line-init
    unset -f seed-zle
    zle accept-line
  }
  zle -N zle-line-init seed-zle
fi

그놈 터미널을 시작하십시오.

gnome-terminal -- env ZLE_INIT='myfunction; echo and whatever else' zsh

관련 정보