web-dev-qa-db-ja.com

迅速なカスタマイズ:ttyがないことを検出する方法

(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変数には値があります。

非対話型シェルを開始するときにプロンプ​​トのカスタマイズ部分が省略されるようにするには、どのような状態を検出する必要がありますか?

5
GetFree

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
5
JKG

/ etc/bashrcの先頭に以下を置きます

[ -z "$PS1" ] && return
3
cstamas

これを行う3つの方法すべての説明は次のとおりです。
http://tldp.org/LDP/abs/html/intandnonint.html

1
GetFree