터미널을 열고 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