混乱的终端

混乱的终端

我有时会弄乱终端,直到我输入“clear”。这种情况以各种方式发生,有时是在编写单个命令时,有时是在文本编辑器中编辑某些内容时。现在我有 Mac OS X Lion,但我记得几年前甚至在我还在使用 Solaris 时也遇到过这个问题。

以下是我成功重现的一个案例。如果我使用 cURL 时犯了一个错误:

Bemmu-Sepponens-MacBook-Pro:b2 bemmu$ curl --data abcde=foo efghijk=bar http://localhost:1234/do_something_cool
curl: (6) Couldn't resolve host 'efghijk=bar'
foo Bemmu-Sepponens-MacBook-Pro:b2 bemmu$

Curl 输出了“foo”和一条错误消息。现在,如果我按向上箭头返回编辑该命令,它首先会变成这样:

Bemmu-Sepponens-MacBook-Pro:b2 bemmu$ curl --data abcde=foo efghijk=bar http://localhost:1234/do_something_cool
curl: (6) Couldn't resolve host 'efghijk=bar'
foo Bemmu-Sepponens-MacBook-Pro:b2 bemmu$ curl --data abcde=foo efghijk=bar http://localhost:1234/do_something_cool

一切看起来仍然正常,但请注意,上一行放在来自 cURL 的“foo”之后。现在,如果我尝试多次按下左箭头以到达错误发生的位置并开始输入,事情就会变得一团糟:

foo Bemmu-Sepponens-MacBook-Pro:b2 bemmu$ curl --data abcde=foo&ijk=bar http://localhost:1234/do_something_cool

我所做的就是转到“abcde=foo ”后面的位置,按一次退格键,然后输入一个 & 符号。它应该变成“abcde=foo&fghijk=bar”,但实际上变成了“abcde=foo&ijk=bar”。

这是正常的吗,还是我的某些设置有错误?

答案1

如果curl在 之后无法输出换行符,这在某种程度上是可以预料到的foo。您可以尝试按⌃C一次,然后再按编辑命令。


还要注意,你应该对数据字符串进行转义,这样“&”符号就不会被解释为命令在后台运行作业

例如:

charon:~ werner$ curl --data abcde=foo&efghijk=bar http://localhost:3000/
[1] 96980
-bash: http://localhost:3000/: No such file or directory

表示[1]某项工作被放在后台,即这个:

[1]+  Exit 2                  curl --data abcde=foo

因此,在 & 符号处,您的命令被截断了。您可以采取以下措施:使用&反斜杠转义。

charon:~ werner$ curl --data abcde=foo\&efghijk=bar http://localhost:3000/

或者,您也可以将数据字符串放在单引号中以防止任何扩张

charon:~ werner$ curl --data 'abcde=foo&efghijk=bar' http://localhost:3000/

答案2

您可以通过输入以下命令重置 OS X 以及我使用过的所有其他 *nix 上的终端:

echo ^V ESC c

在您的终端中。^V 表示“按住控制键并按下 `V' 键”,“ESC”只是按下退出键,而“c”显然是“c”键。

您正在做的是让 echo 吐出转义序列。

^V 表示您按下的下一个键(在本例中为 ESC)将逐字输入到终端中(没有它按 ESC 不会有太大作用),后面的“c”是实际代码。您可以在此处获取完整列表:http://ascii-table.com/ansi-escape-sequences-vt-100.php

这是一个硬重置,因此它可以修复您的终端可能出现的任何疯狂问题,尽管您有时可能会盲输入。

相关内容