Linux
提示定制:沒有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 變數也有一個值。
我必須檢測什麼條件,以便在我啟動非互動式 shell 時忽略提示自定義部分?
這些
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