[解決済み】シェルスクリプトがパイプを介して実行されているかどうかを検出するにはどうすればよいですか?
2022-03-29 02:53:40
質問
シェルスクリプトの標準出力がターミナルに送信されているか、他のプロセスにパイプされているかを検出するにはどうすればよいですか?
例えば、出力を着色するためにエスケープコードを追加したいのですが、対話的に実行したときだけで、パイプで接続したときには着色しないようにします。
ls --color
が行っています。
どのように解決するのですか?
純粋なPOSIXシェルで。
if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi
は "terminal" を返し、出力がターミナルに送られるからです。
(if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi) | cat
は "端末ではない" を返します。これは親要素の出力が
cat
.
は
-t
フラグは、manページで次のように説明されています。
-t fd ファイル記述子 fd が開いていて、端末を参照している場合、真。
... ここで
fd
には、通常のファイル記述子の割り当てのいずれかを指定することができます。
関連
-
[解決済み] "[0: コマンドが見つかりません]" in Bash [重複].
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] あるディレクトリにあるすべてのコード行を再帰的にカウントするにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
-
[解決済み] シェルスクリプトでYYYY-MM-DD形式の日付にする
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] cygwin の ssh が終了時に "Killed by signal 1" と表示される
-
[解決済み] condaのアップデート後、ターミナルのプロンプトから(base)を削除する方法
-
[解決済み] シンタックスエラー」が発生しました。"(" unexpected' (expecting "done") [duplicate]".
-
[解決済み] シェルスクリプトでこのエラーを解決するにはどうしたらよいでしょうか。"読み取り。Illegal option -t "というエラーはどうすれば解決できますか?
-
[解決済み] bashスクリプトでfindコマンドを使用する
-
[解決済み] MINGW64 "make build" エラー。"bash: make: コマンドが見つかりません"
-
[解決済み] Git のブランチコマンドは 'less' のように動作する