
Rubyスクリプトを実行した後、ほぼ100%の場合、bashコマンドラインは現れる非アクティブであるように見えますが、実際にはキー入力を黙って受け入れているだけで、表示はされません。
この問題は、複数の OS アップデートを通じて、複数のバージョンの Ruby で発生しています。現在、OS X 10.9.2 で v1.9.2p29 を実行しています。ではreset
問題が修正されますが、、clear
その他では修正されません。
以下の「今は不要」などは、表示されないecho
コマンドの出力です。
$ echo Now you see my typing...
Now you see my typing...
$ bundle exec jekyll build
...
done.
$ This is the output of an unseen echo command
$ About to run "reset"
$ echo And we''re back.
And we're back.
stty -a
正常に動作している場合の出力:
speed 9600 baud; 57 rows; 187 columns;
lflags: icanon isig -iexten echo echoe echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel iutf8
-ignbrk brkint -inpck ignpar -parmrk
oflags: opost onlcr oxtabs onocr onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = <undef>; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = <undef>;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
stty -a
状況がそうでない場合の出力:
speed 9600 baud; 57 rows; 187 columns;
lflags: -icanon isig -iexten -echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl inlcr -igncr ixon -ixoff -ixany imaxbel iutf8
-ignbrk brkint -inpck ignpar -parmrk
oflags: opost onlcr oxtabs onocr onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = <undef>; eof = <undef>; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U;
lnext = <undef>; min = 1; quit = ^\; reprint = <undef>;
start = ^Q; status = <undef>; stop = ^S; susp = ^Z; time = 0;
werase = <undef>;
特に、 では が になっていることに気が付きlflags
ましecho
た-echo
。
何が原因なのか、他にどのような設定や診断をチェックする必要があるのか分かりません。
答え1
プロンプトにこれを入力すると:
$ And now you don't.
>
これはコマンド ラインの継続をトリガーします。どうやら OSX でセカンダリ プロンプトを設定していないようです (プロンプトのことだと思います)。ただし、問題は特定の文字列 "$ And now you don't.`" を使用しているために発生します。
これを入力すると:
$ echo And we''re back.
And were back.
継続を閉じています。別の文字列を試して、同じ問題が発生するかどうかを確認してください。
注記:肝心な問題は、 の使用方法です'....'
。
答え2
ターミナルドライバ設定の設定echo
は、ターミナルドライバがエコー入力した文字を戻します。vi
または最新のシェルのようなアプリケーション彼らの指示に従ってそれを使わないし、ターミナルも使わない標準モード、すべてのキー操作を処理し、エコー端末デバイスに書き込むことによって、自分で入力したもの。
bash
ただし、readlineやそれを使用するアプリケーションはgdb
、彼らの 反響する端末がecho
無効になっていることを検出すると、他のシェルはそれを好みzsh
ますtcsh
。
readline は独自のエコーを行うため、 (または独自の行エディタを持つ最近のシェル)シェル プロンプトではがecho
常に無効になっていることに注意してください。 / は各プロンプトの前に端末設定を保存し、それを行エディタを実装するために必要な設定( の無効化を含む)に設定し、コマンドを実行する前に保存した値にリセットします。bash
bash
readline
echo
の出力はstty -a
保存された設定です。また、 /readline(他のシェルはそうではありません)は、無効になっているbash
場合は独自のエコーを無効にします。echo
保存された構成で。
次のコマンドを発行すると、表示されているのと同じ動作が得られます。
stty -echo
vi
アプリケーションは通常、パスワード プロンプトを発行するとき、または上記の場合のようにbash
、独自のテキスト編集を実装するためにターミナル エコーを無効にし (その後、ターミナル標準モードを使用しません)、終了時に設定を復元します。
あなたのケースのもう 1 つの違いは、icanon
無効になっていることです。これは、2 番目のケースである可能性が高いことを示唆しています。
おそらく、Ruby スクリプトは、ターミナル設定を正しくリセットできないビジュアル アプリケーションを起動します。そのアプリケーションが SIGKILL などのトラップ不可能なシグナルで強制終了された場合、またはアプリケーションがまだ実行中または一時停止中の場合、この問題が発生する可能性があります。
stty sane
ターミナル設定を復元するには、または を実行しますreset
。まだ実行中のプロセスがないこと、スクリプトがどのアプリケーションを実行しているか、なぜ誤動作しているのかなどを確認することをお勧めします。