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端末を起動します。

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

おすすめ記事