テストのために記述子を -t 端末として表示

テストのために記述子を -t 端末として表示

-t testを使用して、記述子が端末に接続されているかどうかをテストできます。

if [ ! -t 0 ]; then
    echo "Stdin is not from terminal"
fi

ファイルまたはプロセスを指す記述子Xがあります(>(cmd)リダイレクトを使用)。端末のように見せることができますか?テストに合格するには -t?

ベストアンサー1

代わりにパイプの代わりにttyになりたいのが標準入力であると仮定すると、>(cmd)次のことを試すことができます。cmd

>(socat -u - exec:'cmd',pty)

socatpseudo-ttyペアを使用してcmdstdinをスレーブ部分に接続します([ -t 0 ]それからtrueを返します)。

擬似ターミナルは生モードに切り替わるため、ラインルールがデータを妨害しないようにするため、その点でパイプとほぼ同じです。

しかし、擬似端子はパイプのように一端でのみ閉じることはできません。したがって、入力がないとは限りsocatません。cmd代わりに、socatstdinがファイルの終わりに達した後socatしばらく待ってからpseudo-ttyを削除します。これは通常cmdSIGHUPを受信することを意味します。

コマンドがデータの処理に時間がかかる場合や、操作の実行を開始する前に標準入力からファイルが終了するのを待つと、コマンドは正常に機能しません。

おすすめ記事