ダイアログボックスを使用したファイルの表示

ダイアログボックスを使用したファイルの表示

画面に表示したいいくつかのテキストを含むファイルがディスクにあります。次のことができます。

dialog --yesno "`cat FILE`" 10 100

FILEただし、サイズが大きくなるとシェルのコマンド長制限を超える可能性があり心配されます。これを行う他の方法はありますか?

ユーザーがスクロールできるようにファイルの内容を表示したいと思います。本物ロング)次に実行するアクションを選択します。 (「はい」ボタンと「いいえ」ボタンのラベルをもう少し意味のあるものに変更しました。)おそらく、このようにコマンドラインから6ページのテキストを送信しようとすると失敗します。

答え1

dialogこのマニュアルページを見ると、テキストをパラメータとして渡すことを避ける方法はないようです。データをパイプで接続したり、ファイルから直接読み取ったりする方法はないようです。ただし、パラメータサイズ制限を使用できますhead。ほとんどのLinuxシステムでは、単一パラメータの最大サイズは32KiBなので、次のことができます。

dialog --max-input 32768 --yesno "$(head -c 32K FILE)" 10 100

単一パラメータの最大サイズが定義されており、インストールされている場合はカーネルヘッダMAX_ARG_STRLENにあります。/usr/include/linux/binfmts.h通常、この値は1KiBPAGE_SIZE * 32です(参照)。PAGE_SIZE/usr/include/linux/a.out.h

もちろん、これらの値は完全に再構成できます。また、これはMAX_ARG_STRLENLinux専用で、Linux 2.6.23で導入されました。実際の制限の詳細については、次を参照してください。コマンドの単一パラメータの最大サイズを定義するものは何ですか?

修正する

一体この--file主張を実際に使うことができます。 (テストされていません)次のことができるようです。

{
  echo -n \"
  sed 's/"/\"/' FILE
  echo -n \"
} | dialog --yesno --file '&1' 10 100

sedファイルに引用符がないことがわかっている場合は、引用符は必要ありません。または、必要なすべての内容(引用符など)をファイルに入れて、次の手順を--yesno実行します。

dialog --file FILE

関連情報