Pythonプログラムの出力(stdout)を変数に入れようとすると、次のようになります。
set zpath (python something.py "$argv")
ただし、プログラムが呪いインタフェースを生成した場合、表示されません。
プログラムは、何かを選択できる呪いインターフェースを一時的に表示し、プログラムが終了する前に呪いを終了します。有用なデータを標準出力として印刷します。
2>&1 >/dev/tty
コマンドの末尾に追加できると読みました。
これにより、呪いインターフェイスが表示されますが、出力は変数に保存されません。
テストする内容を印刷すると、変数の代わりにシェルに印刷されます。
呪いインターフェイスを動作させ、標準出力キャプチャも動作させるにはどうすればよいですか?
/dev/ttyへのリダイレクトが混乱しているように見えるので、特に簡単な解決策を探しています。
他のシェルで動作するようにする必要があります。
答え1
コマンドの最後に 2>&1 >/dev/tty を追加できることを読みました。
これはstdoutを端末にリダイレクトし、stderrをstdoutが元々あった場所(コマンド代替バッファ)にリダイレクトします。
インターフェイスが表示され、リダイレクトなしで実行してもインターフェイスが表示されない場合、プログラムはstdoutを使用してインターフェイスを表示します。
これは次のことを意味します。
有用なデータを標準出力として印刷します。
この出力は最終的に端末にも到達します。
プログラムがインターフェースを表示するために標準出力でttyを使用しようとしているようです。そしてその後、便利な出力を同じファイル記述子(stdout)で印刷すると、2つを別々にリダイレクトできません。シェルは分離されていないため分離できません。
あなたがする必要があるのは、インターフェースをあるファイル(例:/ dev / tty)に表示し、便利な出力を別のファイル(例えばstdout)に印刷するようにプログラムを変更することです。
これも方法です富士、インタラクティブな端末インターフェイスを開き、標準出力に何かを印刷します。 Unixで実行すると/ dev / ttyが開きます。 - 参照https://github.com/junegunn/fzf/blob/ef67a45702c01ff93e0ea99a51594c8160f66cc1/src/tui/light_unix.go#L50-L63そしてhttps://github.com/junegunn/fzf/blob/b3ab6311c587e18ee202c5205afc658a33f2a23c/src/tui/light.go#L29
あるいは、stdoutにディスプレイを配置し、stderrに役立つ情報を印刷することもできます。これで2>&1 >/dev/tty
トリックが機能します。
注:
zpath設定(python Something.py "$argv")
魚ではおそらくそうです。いいえこれを引用したかったです$argv
。複数の引数に設定されている場合、今度は引数を一緒に意味のないものにまとめました。たとえば、Fishはbashのように単語の分離を実行しないため、スペースにも役立ちません。変数がX要素に設定されている場合は、引用符の外側に展開すると、再分割することなくそのX要素に展開されます。