(tputを使用して)色付きのカスタマイズされたプロンプトがあり、サーバーで非対話型セッションを開始するたびに、多数のエラーが発生します。
たとえば、次のような非インタラクティブセッションを開始した場合:
ssh root@hostname6 "echo 'hello' ; echo $TERM"
私が得る出力は次のとおりです。
hello
xterm
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: 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
stdin: is not a tty
したがって、セッションが非対話型の場合でも、$ TERM変数には値があります。
非対話型シェルを開始するときにプロンプトのカスタマイズ部分が省略されるようにするには、どのような状態を検出する必要がありますか?
tput
コマンドは、PS1への割り当てが行われたときに評価されます。スタートアップファイルはsshセッションの開始時に処理されるため、セッションがインタラクティブでなくても割り当てが行われます。それをテストして、実際にインタラクティブセッションを開始するときにのみ割り当てを行うことができます。
if [[ $- =~ i ]]
then
# set PS1 using tput
else
# set a plain PS1 (or use hard-coded escape sequences)
fi
TTYにはbashの組み込みテストがあります。 3.0が追加されたのを忘れましたか?比較的新しいと思います。 cronから実行する場合、またはユーザーが直接実行する場合に異なる動作が必要なスクリプトで使用します。
if [ -t 0 ]; then
echo "I'm a TTY"
fi
/ etc/bashrcの先頭に以下を置きます
[ -z "$PS1" ] && return
これを行う3つの方法すべての説明は次のとおりです。
http://tldp.org/LDP/abs/html/intandnonint.html