前言
-
偶而會在一些 shell script 裡面看到
[[ -t 1]]
的判斷,究竟要判斷什麼?
說明
interactive shell?
- 關於 bash test operator 參考:Bash Test Operators
|
|
-
-t
後面的1
指的是:file descriptor,也就是確認現在執行的環境是否連接一個 terminal (=tty
,text input/output environment)[1]。 -
主要的目的是判斷「是不是 interactive 的環境」,方便後續作業。例如如果是 terminal,代表 output 需要呈現友善一點 (頗有可能是人在讀);如果只是要執行一個背景 shell script 作業,就不用 (太多) output 呈現在螢幕或 log 上 [2]。
但這是不精準的方法。
判斷 interactive shell 的正確方式
- 用
$-
確認目前 shell 的設定 [3],如果有i
參數才代表真的是 interactive:
|
|
可以在自己的 terminal 試試看
echo $-
# himBH
就能得到目前 shell 的設定。
himBH
的意思 [3]:
-
H
-histexpand
:history expansion enabled -
m
-monitor
:job control enabled -
h
-hashall
:快取指令的 hash 結果 [4] -
B
-braceexpand
:brace expansion enabled -
i
-interactive
:當前 shell 為 interactive