November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Monday, April 26th, 2010 10:01 pm

Предположим, в силу исключительной криворукости вы умудрились в терминале привязать букву “e” к команде erase. И теперь при нажатии этой буквы у вас старается символ перед курсором. Соответственно, набрать stty sane или stty erase не представляется возможным.

Что делать?? Шелл пусть для определённости будет bash.
Один из вариантов отгадки под катом.

stty $'san\x65'

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Monday, April 26th, 2010 09:38 pm (UTC)
а как команда-то будет выглядеть целиком?
Monday, April 26th, 2010 09:41 pm (UTC)
printf %s 'stty sanv' | tr u-w d-f | sh

Upd: и без tr обойтись можно, ибо printf ;-)

Upd2: для удостоверения:
STANDARDS
     The printf command is expected to be compatible with the IEEE Std 1003.2
     (``POSIX.2'') specification.</pre.
Edited 2010-04-26 09:44 pm (UTC)
Monday, April 26th, 2010 09:48 pm (UTC)
$ printf %s 'stty sanv' | tr u-w d-f | sh
stty: standard input: Invalid argument

что-то не так..
Monday, April 26th, 2010 09:56 pm (UTC)
Тогда, видимо, надо туда ещё </dev/tty воткнуть. Подобрать триаду букв, которая не используется (v уже не годится)
Monday, April 26th, 2010 10:06 pm (UTC)
ну где-то так тогда:
printf %s 'stty sanh </dhv/tty' | tr g-i d-f | sh

а объяснение , почему в предыдущем варианте stty ругнулся - это отдельная задачка для сисамдинов :)
Monday, April 26th, 2010 10:10 pm (UTC)
сисамдин -- отличная очепятка!
Monday, April 26th, 2010 09:51 pm (UTC)
вот так работает:
`printf %s 'stty sanv' | tr u-w d-f`
Monday, April 26th, 2010 09:58 pm (UTC)
да, точно, так самое переносимое, видимо, будет.
Monday, April 26th, 2010 09:55 pm (UTC)
ну или сразу так:
`printf "stty san\x65"`
Monday, April 26th, 2010 09:57 pm (UTC)
Это не-POSIX поведение printf, фря так не умеет, например.
Monday, April 26th, 2010 10:15 pm (UTC)
в условии задачи был bash, а не sh с внешним printf'ом :)