bashスクリプトでtputコマンドを使用してテキストの色を指定しています。
〜のように
tput setaf 2
パテナコンソールでスクリプトを実行すると、すべてがうまく機能します。
ただし、SSHを介してスクリプトを実行するいくつかの外部WINアプリケーションエンジンを実行すると、tputで次のエラーが発生します。
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tputコマンドを使用するためにbashスクリプトで設定する必要があるもの(ENVなど)を提案してください。
答え1
接続時にssh
環境変数がリモートアプリケーションに渡されたり、渡されたりしない場合があります。また「WINアプリケーションエンジン」TERM
設定がまったくない可能性があります。
その場合(またはその問題TERM
について)同じ効果があります。putty
xterm
tput setaf 2
tput -T putty setaf 2
使用する制御順序がsetaf
同じであるためです。繰り返しますが、これらはTERM
次のlinux
とおりです。
tput setaf 2
tput -T linux setaf 2
setaf
前景(テキスト)を特定の値に設定するために使用されます。米国国立標準協会(x3.64) エスケープシーケンス。あなたが使用しているほとんどの端末はこれを行います。あるいは、一部はこれらのエスケープシーケンスを認識しない。言及されたアプリケーションがないので、実験を通してこれが機能していることを確認する必要があります。「WINアプリケーションエンジン」対応するエスケープシーケンスを識別します。その場合、同じ内容を使用できます。米国国立標準協会脱出してできます。
tput -T xterm setaf 2
(もちろん、パテ、Linux、xtermの間には異なる違いもあります。)
答え2
これにはいくつかの可能なオプションがあります。
tput
対話型端末セッションがない場合は使用しないでください。次のいずれかの方法を選択できます。[[ -t 1 ]] && tput setaf 2 ... # Only set a colour if we have a tty [[ -n "$TERM" ]] && tput setaf 2 ... # Only set a colour if we have a terminal type definition
仮想端末タイプを設定します。 /のほとんどの機能を
export TERM=dumb
無効にできます。もちろん、まだ端末タイプを設定していない場合にのみこれを実行できます。terminfo
termcap
[[ -z "$TERM" ]] && export TERM=dumb # Set a dummy terminal type if none set [[ ! -t 1 ]] && export TERM=dumb # Set a dummy terminal type unless a tty
このアプローチでは、後続のコードを変更する必要はなく、アプリケーションを実行する前に設定することも、違いを知る必要もありません。
答え3
tty コマンドを使用して、スクリプトが端末で実行されているかリモートで実行されているかを確認します。
if tty -s
then
# executed only if in a terminal
tput setaf 2
fi
SSH セッションでコマンドを指定した場合、then
および間のコマンドは実行されません。fi
答え4
これはtputの問題に対する私の解決策です。
# when $TERM is empty (non-interactive shell), then expand tput with '-T xterm-256color'
[[ ${TERM}=="" ]] && TPUTTERM='-T xterm-256color' \
|| TPUTTERM=''
declare -r RES='tput${TPUTTERM} sgr0' REV='tput${TPUTTERM} rev'
declare -r fRD='tput${TPUTTERM} setaf 1' bRD='tput${TPUTTERM} setab 1'
declare -r fGN='tput${TPUTTERM} setaf 2' bGN='tput${TPUTTERM} setab 2'
...
echo ${fRD}" RED Message: ${REV} This message is RED REVERSE. "${RES}
echo ${fGN}" GREEN Message: ${REV} This message is GREEN REVERSE. "${RES}
...
これにより、対話型シェルか非対話型シェルかは重要ではありません。 tputはまだうまくいきます。