web-dev-qa-db-ja.com

スクリプト内で「export TERM = linux」が実際に行うこと

私の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設定を確認できます。

プログラムに最適な端末エミュレータを見つけるには、実行しているアプリケーションのプロバイダーに確認する必要がある場合があります。ほとんどのアプリケーションでは、エミュレータが既にxtermlinuxなどの互換性のあるものに設定されていることが期待されます。

set -x
デバッグ設定:
ノイズの多いスクリプトを参照しています。デバッグに使用されるset -x設定により、スクリプトから詳細な出力が得られます。何が起こっているのかを見て、スクリプトを思い通りに実行したら、set -x記号をその前に配置して、#行をコメントアウトできます。

set -e
この設定は、コマンドエラーで終了するようにスクリプトに指示しています。たとえば、コマンドがディレクトリを存在しないディレクトリに変更するか、存在しないファイルをリストする場合、スクリプトは次の行に進むのではなく、エラーで終了します。

ログインしているサーバーを介したsshの問題により、デフォルトでは、サーバーはログインしているコンピューターの設定のターミナルエミュレーターと一致しようとします。一致するものがない場合、どの設定を処理できるかがわかりません。このためには、export TERMコマンドを使用して、サーバーとの通信方法を指定する必要があります。

6
L. D. James

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が必要
1
muru

GNU gettext manual pageによると、TERM変数には「...テキストウィンドウの機能の識別子が含まれています」。言い換えれば、システムに、使用していると思われる端末の種類と、画面上のテキストをどのように適合させるかを伝えるだけです。

TERM=linuxは、Linuxコンソールを使用する予定であるため、出力が最小限になり、一部の言語がサポートされない可能性があることを意味します。

Muruが指摘したように、実際には擬似ttyを割り当てる必要があります。 TERM変数を変更すると役立つ場合がありますが、TERM=linuxはお望みのものではありません。実際のLinuxコンソールを使用していません。 sshの-tオプションは、より良いアプローチです。

1