私のbashスクリプトは、sshを介してサーバー内で実行すると余分なノイズが発生します。
+ Sudo apt-get install -yqq nodejs
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend will not work on a dumb terminal, an emacs Shell buffer, or without a controlling terminal.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:
私がそこに投稿したのを見た提案の1つは、TERM = linuxをエクスポートすることでした
副作用はありますか?次のように、スクリプトの最初に行うことをお勧めします。
#!/bin/bash
set -e
set -x
TERM=linux
export TERM=linux
コマンドは、ターミナルエミュレーターをlinux
に設定します。使用しているコンソールの環境と機能に応じて、一部のエミュレーションは他のエミュレーションよりもうまく機能します。
UbuntuのデフォルトのTERM設定はxterm
です。 echo $TERM
を実行すると、TERM設定を確認できます。
プログラムに最適な端末エミュレータを見つけるには、実行しているアプリケーションのプロバイダーに確認する必要がある場合があります。ほとんどのアプリケーションでは、エミュレータが既にxterm
やlinux
などの互換性のあるものに設定されていることが期待されます。
set -x
デバッグ設定:
ノイズの多いスクリプトを参照しています。デバッグに使用されるset -x
設定により、スクリプトから詳細な出力が得られます。何が起こっているのかを見て、スクリプトを思い通りに実行したら、set -x
記号をその前に配置して、#
行をコメントアウトできます。
set -e
この設定は、コマンドエラーで終了するようにスクリプトに指示しています。たとえば、コマンドがディレクトリを存在しないディレクトリに変更するか、存在しないファイルをリストする場合、スクリプトは次の行に進むのではなく、エラーで終了します。
ログインしているサーバーを介したssh
の問題により、デフォルトでは、サーバーはログインしているコンピューターの設定のターミナルエミュレーターと一致しようとします。一致するものがない場合、どの設定を処理できるかがわかりません。このためには、export TERM
コマンドを使用して、サーバーとの通信方法を指定する必要があります。
TTYが割り当てられていない場合、TERM
を設定しても意味がありません。 SSHを使用している場合は、ssh -t
を使用します。
-t Force pseudo-tty allocation. This can be used to execute
arbitrary screen-based programs on a remote machine, which can be
very useful, e.g. when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
これらのエラーに注意してください。
debconf:(ダイアログフロントエンドはダム端末、emacsシェルバッファー、または制御端末なしで動作しません) ... debconf:(このフロントエンド制御ttyが必要。
GNU gettext manual pageによると、TERM
変数には「...テキストウィンドウの機能の識別子が含まれています」。言い換えれば、システムに、使用していると思われる端末の種類と、画面上のテキストをどのように適合させるかを伝えるだけです。
TERM=linux
は、Linuxコンソールを使用する予定であるため、出力が最小限になり、一部の言語がサポートされない可能性があることを意味します。
Muruが指摘したように、実際には擬似ttyを割り当てる必要があります。 TERM
変数を変更すると役立つ場合がありますが、TERM=linux
はお望みのものではありません。実際のLinuxコンソールを使用していません。 sshの-t
オプションは、より良いアプローチです。