Мне иногда удается испортить свой терминал, пока я не наберу "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$

Скручиваемость выдает "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

Все по-прежнему выглядит нормально, но обратите внимание, что предыдущая строка была помещена после "foo", полученного из cURL. Теперь, если я попытаюсь нажать левую стрелку достаточное количество раз, чтобы добраться до места, где произошла ошибка, и начну печатать, все станет не так:

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

Все, что я сделал, это сразу же после «abcde = foo» отправился в то место и нажал клавишу "Backspace", а затем вставил амперсанд. Он должен был стать «abcde = foo & fghijk = bar», но вместо этого он стал «abcde = foo & ijk = bar».

Это нормально или у меня где-то не так?

2 ответа2

1

Вы можете сбросить настройки терминала в OS X и во всех других * nix, где я был, набрав:

echo ^V ESC c

в вашем терминале. ^ V означает «удерживать контроль и нажать клавишу" V "», "ESC" - просто нажатие клавиши "escape", а "c" - это, очевидно, клавиша "c".

То, что вы делаете, - это эхо выплевывает escape-последовательность.

^ V означает, что следующая нажатая вами клавиша (в данном случае ESC) будет дословно введена в терминал (нажатие ESC без нее ничего не даст), следующий код "c" является действительным кодом. Вы можете получить полный список здесь: http://ascii-table.com/ansi-escape-septions-vt-100.php

Это жесткий сброс, поэтому он исправит практически любую сумасшествие, в которое может попасть ваш терминал, хотя иногда вы можете печатать вслепую.

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/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .