端末を開き、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端末を起動します。
gnome-terminal -- env ZLE_INIT='myfunction; echo and whatever else' zsh