質問: いくつかの cli ツールでは、標準出力が端末 (tty?) に繋がっている場合に、その挙動が変化するツールがあります。 たとえば、 redis-cli がそうで、端末上で `redis-cli keys '*'` を実行すると、 human readable な形式で出力されますが、その出力をパイプにつないだ場合には、 machine readable な形式の出力になります。 ``` % redis-cli keys '*' 1) "foo" % redis-cli keys '*' | cat foo ``` このような挙動を、ふと、シェルスクリプトで再現したくなりました。 ### 質問 標準出力が端末に繋がっているかどうかを、シェルスクリプトから判定することはできますか?
回答: testコマンドの -t オプションで判定できるようです。 Linux基本コマンドTips(222):【 test 】コマンド(応用編)――文字列の一致などを判定する > > testの主なオプションと式(標準入出力の判定) > > 式 真になる条件 > > -t 0 標準入力が端末 > > -t 1 標準出力が端末 > > -t 2 標準エラー出力が端末 > > -t 数値 数値番目のファイルディスクリプターが端末 > > > こちらも。 test - コマンド (プログラム) の説明 - Linux コマンド集 一覧表 > > -t [fd ] > > fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1 (標準出力)。 > > >