シェルスクリプトで、標準出力が端末の場合に挙動を変化させたい


いくつかの cli ツールでは、標準出力が端末 (tty?) に繋がっている場合に、その挙動が変化するツールがあります。

たとえば、 redis-cli がそうで、端末上で `redis-cli keys '*'` を実行すると、 human readable
な形式で出力されますが、その出力をパイプにつないだ場合には、 machine readable な形式の出力になります。

[code]

     % redis-cli keys '*'
    1) "foo"
    
     % redis-cli keys '*' | cat      
    foo
    
[/code]

このような挙動を、ふと、シェルスクリプトで再現したくなりました。

### 質問

標準出力が端末に繋がっているかどうかを、シェルスクリプトから判定することはできますか？




testコマンドの -t オプションで判定できるようです。

[Linux基本コマンドTips（222）：【 test
】コマンド（応用編）――文字列の一致などを判定する](http://www.atmarkit.co.jp/ait/articles/1807/12/news012.html)

> testの主なオプションと式（標準入出力の判定）  
>  式 真になる条件  
>  -t 0 標準入力が端末  
>  -t 1 標準出力が端末  
>  -t 2 標準エラー出力が端末  
>  -t 数値 数値番目のファイルディスクリプターが端末

こちらも。  
[test - コマンド (プログラム) の説明 - Linux コマンド集
一覧表](https://kazmax.zpp.jp/cmd/t/test.1.html)

> -t [fd ]  
>  fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1 (標準出力)。




testコマンドの -t オプションで判定できるようです。

[Linux基本コマンドTips（222）：【 test
】コマンド（応用編）――文字列の一致などを判定する](http://www.atmarkit.co.jp/ait/articles/1807/12/news012.html)

> testの主なオプションと式（標準入出力の判定）  
>  式 真になる条件  
>  -t 0 標準入力が端末  
>  -t 1 標準出力が端末  
>  -t 2 標準エラー出力が端末  
>  -t 数値 数値番目のファイルディスクリプターが端末

こちらも。  
[test - コマンド (プログラム) の説明 - Linux コマンド集
一覧表](https://kazmax.zpp.jp/cmd/t/test.1.html)

> -t [fd ]  
>  fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1 (標準出力)。

