如何退出或取消错误的 bash 命令?

如何退出或取消错误的 bash 命令?

我预计这会受到一些批评,但我在任何地方都找不到答案。看起来应该是这么明显。有时,当我在 bash 终端中输入错误的命令时,光标只是跳到下一行,没有任何错误或任何内容。我无法说出我做错了什么。就好像我被困在程序里一样。重演:

$ tidy

我:“哎呀!这不是我要输入的内容……”

:q

我:“那没用……”

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

我知道我搞砸了,但是如何在不关闭终端的情况下返回提示符?

答案1

你总是可以尝试一些显而易见的事情,比如^C^D(eof)、Escape 等,但如果全部失败,我通常最终会使用 (Control-Z) 暂停命令,^Z这会让我回到 shell。

然后,我执行一个ps命令并记下该命令的 PID(进程 ID),然后发出一个kill thePIDkill -9 thePID如果前者不起作用)命令来终止应用程序。

请注意,这不是一个整齐的(没有双关语意图)终止应用程序/命令的方法,您可能会面临无法保存某些数据等的风险。

一个例子(我已经使用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

答案2

尝试按Ctrl-DCtrl- C。如果失败,则终止该进程。

尝试使用tidy您提到的命令,Ctrl-D有效。

答案3

另一个解决方案(尚未提及)是SIGQUIT使用ctrl+发送信号\

这是更强比一个ctrl+c

答案4

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

相关内容