これは私が試したすべての展開で発生します。
$猫| bash-3.2$ ls 豊富なバー bash-3.2$
これでセッションが一時停止しました。つまり、あなたは得ます一つコマンドを実行すると、端末ウィンドウをほぼ閉じる必要があります。 SIGTERM(別名^ C)はbashによって検出されますが、ジョブシェルに戻ることはできません。
私はこれがbashがtty制御のためにcatと戦うことに関連していると思います-i
が、明確な情報を見つけることができません。何が起こっているのかを説明できる人はいますか?実行中のプログラムをexeclp("/bin/bash", "bash", "-i")
中断せずに自動的に起動するには?expect
ttyの例外を処理するには、同様のプログラムを書く必要がありますか?
答え1
短い答え:はい、Expectを使用する必要があります。
についてはなぜ失敗します。動作によってbash -i
open readline
( を使用しても--noediting
) はパイプでかなり悪く動作します。また、stdout
ターミナルモード(非遮断モードを含む)を設定する代わりに通過するように見えます。stdin
これは、ほとんどの制御文字の期待される動作を失うことを意味します。 (ただし、ttyを直接読みません。)
注:代わりに^C
送信してください。ただし、両方とも対話型()モードで停止しています。SIGINT
SIGTERM
-i
SIGHUP