-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)
socat
pseudo-ttyペアを使用してcmd
stdinをスレーブ部分に接続します([ -t 0 ]
それからtrueを返します)。
擬似ターミナルは生モードに切り替わるため、ラインルールがデータを妨害しないようにするため、その点でパイプとほぼ同じです。
しかし、擬似端子はパイプのように一端でのみ閉じることはできません。したがって、入力がないとは限りsocat
ません。cmd
代わりに、socat
stdinがファイルの終わりに達した後socat
しばらく待ってからpseudo-ttyを削除します。これは通常cmd
SIGHUPを受信することを意味します。
コマンドがデータの処理に時間がかかる場合や、操作の実行を開始する前に標準入力からファイルが終了するのを待つと、コマンドは正常に機能しません。