追加読書

追加読書

私が実行したいプログラムがありますが、私の端末に実際より少ない数の列があると信じるように欺くことです。これは必要な基本的な切り捨てが可能になるからです。

resize提案どおりにxterm試しました。アスクベントからしかし、xtermでのみ機能し、スクリプトを書くのは難しいです。出力を取得するには、スクリプトで使用できるものが必要です。ミッション戦士注文する。

残念ながら、他の値をエクスポートしてもCOLUMNS何も変わらないようです。

答え1

コミュニティの答えは正しい方向に向かっています。

tmux目的のジオメトリ(特定の行数を想定している列の幅)に分割されたセッションを作成できます。

tmux new-session -d -s task-session -x WIDTH -y HEIGHT

その後、コマンドを実行します。

tmux send-keys 'task' ENTER

コマンド出力をファイルにパイプしないでください。

ウィンドウをtmuxファイルにダンプします。

tmux capture-pane -b temp-buffer -S -
tmux save-buffer -b temp-buffer output.txt
tmux delete-buffer -b temp-buffer 

引用する

答え2

実際、POSIX標準では、環境変数の値がCOLUMNS端末サイズを取得する他の方法よりも優先されます。標準では、変数の用途の1つを「端末やウィンドウよりランダムに小さい領域にデータを表示する」と説明しています。

これらの他の方法は標準化されていませんが、通常、エンドデバイスのファイル記述子を開きますioctl()。あなたのプログラムは標準出力を確認せずに端末デバイスとTIOCGWINSZ見なしますが、これを行います。isatty()

残念ながら、一部のプログラムはCOLUMNS環境変数を尊重せず、あなたのプログラムもその一つです。代わりに、独自の特別な非標準メカニズム、つまりdetection設定ファイルの設定を提供します。defaultwidth

さらに悲しいことは、これらの操作が環境変数とは反対であるということですCOLUMNS。それらは代替品ではなく代替品です。detectionプログラムの使用を中止しTIOCGWINSZてデフォルト状態に戻るには、プログラムを閉じる必要があります。その後、defaultwidth検出を強制的にオフにするには値を設定する必要があります。設定されていない場合は80、0の場合は65536です。

さらに残念なことは、detectionPOSIX標準COLUMNSLINES変数が互いに独立して動作するのとは異なり、幅と高さの両方に閉じが適用されることです。したがって、defaultheight強制終了を検出するには、設定されていない場合は24、0の場合は65536のaも確認する必要があります。

あなたできる、または検出を終了し、疑似端末にプログラムをだます。 tmuxすべてのキーパディングと中間ファイルが必要な複雑な方法です。 Bernsteinptybandagestty columns(内部擬似端末の場合)の使用は1行でより簡単で、プログラムの実行中にリアルタイムで標準出力に出力されます。

ptybandage sh -c 'stty列40';

追加読書

  • バーンスタイン、ダニエル(1996)。ptybandageDJBウェア
  • ジョナサンデボインポラード(2014)。ptybandageスナックガイド。ソフトウェア。

答え3

以下はまだ機能していませんが、いくつかの修正で動作させることができるようです。次のコマンドは、taskwarriorを実行する前に新しいtmuxセッションを作成し、ウィンドウサイズを変更します。

tmux new -d -s s1
tmux split -v
tmux resize-pane -t s1 -y 5
tmux send-keys "task > output.txt" ENTER
sleep 1
tmux kill-session -t s1
cat output.txt

関連情報