私にとっては、この問題の起源は、コマンドラインでwhiptailコマンドを実行できることです。 %pre
Centosベースのカスタムディストリビューションをインストールするときのキックスタートファイルからのスクリプト。ただし、Anacondaで観察された動作は、あらゆるLinuxシステムの仮想端末を介して簡単に再現できます。
Anacondaでキックスタートとしてwhiptailコマンドを実行する %pre
スクリプト新しいTTYでTTYを切り替えてコマンドを実行する必要があります。これを行う方法に関する一般的な提案は次のとおりです。
%pre
exec </dev/tty6 >/dev/tty6 2>/dev/tty6
chvt 6
# then execute your command, for example:
whiptail --inputbox "Enter some text..." 10 30
# switch back to the original TTY
chvt1
exec </dev/tty1 >/dev/tty1 2>/dev/tty1
%end
この方法を使用すると、ホイップテイルダイアログボックスは新しいTTYに正しくレンダリングされますが、ダイアログとの対話はできません。 tab
テキスト入力、 "Ok"、および "Cancel"要素を切り替えるのではなく、実際にはテキスト入力ボックスにタブを挿入します。同様に、矢印キーを使用すると、ダイアログにエスケープシーケンスが書き込まれます。
この動作は、python snack(whiptail - libnewtと同じライブラリを使用)とdialogを使用しているときにも見られます。
もちろん、whiptailを使用するのではなく、対話型シェルスクリプトを使用することもできますが、この動作を実現するための唯一の要件はそれであると考えていたので入力ストリームと出力ストリームを正しくリダイレクトするため。
TL、DR
私は1つのTTYで実行することができ、スクリプトの出力/入力を別のTTYに/から持ってくることができるwhiptail / dialogコマンドを含むスクリプトを作成することに興味があります。
exec </dev/tty6 >/dev/tty6 2>/dev/tty6
そしてchvt 6
それぞれ。