st(簡易端末)に渡された -e フラグを使用して、セミコロンで区切られたコマンドを実行します。

st(簡易端末)に渡された -e フラグを使用して、セミコロンで区切られたコマンドを実行します。

メモ: st私の質問の端末エミュレータの実際の名前は何ですか?https://st.suckless.org/


タップするとポップアップしてクリップボードにある単語の翻訳が表示されるショートカットを作成したいと思います。

試してみましたが、次のエラーですぐに終了しました。

$ st -e "trans $(xclip -o) -t en; read"`
child finished with error '256'

xtermしかし、期待にも同じことが当てはまります。

$ xterm -e "trans $(xclip -o) -t en; read"

stのオプションとして1つのコマンドのみを使用します-eが、端末がすぐに閉じないように、transの後に読み取りまたは同様の操作を実行する必要があります。

これはstのせいですか、それとも私が何か間違っているのですか?

ベストアンサー1

この-eオプションは互換性メカニズムです。シンプル端末。 (有無にかかわらず)渡すコマンドと引数は、単純な端末フォークを介して-e直接実行されます。execvp()子プロセスで実行中指定されたコマンドとパラメータが正確に一致します。シェルは含まれず、渡されたパラメータはstそのままターゲットプログラムに送信されます。

あなたはすべてを議論に渡しました。これらの単純な端末は実際には文字通り名前付きコマンドを実行しようとしますtrans $(xclip -o) -t en; read(一重引用符が使用されている場合、または二重引用符が使用されている場合は拡張結果によって変更されます)。明らかに、そのような名前のコマンドはありません。

シェルコマンドライン(ここでは拡張、シェル組み込み、シェルコマンド構文など)を使用するには、シェルを明示的に呼び出して理解する必要があります。

st -e sh -c 'trans "$(xclip -o)" -t en; read'

これにより、コマンドを含むショートシェルスクリプトを実行するシェルがst起動します。sh

おすすめ記事