web-dev-qa-db-ja.com

不正なbashコマンドを終了またはキャンセルするにはどうすればよいですか?

私はこれのためにいくつかのフレークを得ると期待していますが、私はどこにも答えを見つけることができません。それはとても明白なはずです。ときどき、bashターミナルで不適切なコマンドを入力すると、カーソルが次の行にジャンプするだけで、エラーなどは発生しません。何を間違えたかわかりません。プログラムに行き詰まっているようなものです。再現:

$ tidy

私:「おっと!それはタイプするつもりではなかった...」

:q

私:「うまくいかなかった...」

:exit
:quit
exit
quit
/exit
/quit
-exit
-quit
-wtf???

失敗したことはわかっていますが、ターミナルを閉じずにプロンプ​​トに戻るにはどうすればよいですか?

44
Big McLargeHuge

いつでも^C^D(eof)、Escapeなどの明らかなことを試すことができますが、すべてが失敗すると、通常は^Z(Control-Z)でコマンドを中断します。シェルに戻ります。

次にpsコマンドを実行し、コマンドのPID(プロセスID)をメモしてから、kill thePID(前者が機能しなかった場合はkill -9 thePID)コマンドを発行してアプリケーションを終了します。

これは、アプリケーション/コマンドを終了するためのtidy(しゃれたことはありません)の方法ではなく、一部のデータなどを保存しないリスクがあることに注意してください。

例(tidyを使用しましたが、インストールしていません):

$ gnuplot

    G N U P L O T
    Version 4.2 patchlevel 6 
     ....
    Send bug reports and suggestions to <http://sourceforge.net/projects/gnuplot>

Terminal type set to 'wxt'
gnuplot> 
gnuplot>               #####  typed ^Z here
[1]+  Stopped                 gnuplot
$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1708 pts/1    00:00:00 gnuplot
 1709 pts/1    00:00:00 ps


$ kill 1708            ###### didn't kill the command as ps shows

$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1708 pts/1    00:00:00 gnuplot
 1710 pts/1    00:00:00 ps
$ kill -9 1708           ### -9 did the trick
$ 
[1]+  Killed                  gnuplot

$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1711 pts/1    00:00:00 ps
55
Levon

押してみてください Ctrl-D または Ctrl-C。失敗した場合は、プロセスを強制終了します。

あなたが言及したtidyコマンドを試してみて、 Ctrl-D 動作します。

13
Renan

別の解決策(まだ言及されていません)は、SIGQUIT信号を使用して送信することです ctrl+\

より強いより ctrl+c

7
Gilles Quenot

CTRL+D == exit Shell command

そして

CTRL+C == terminate the current process, Of course may be the given software handle it and CTRL+D doens't work

もちろん、それらはkernel signal詳細については、次をご覧ください。

man 7 signal
4
PersianGulf