Предположим, в силу исключительной криворукости вы умудрились в терминале привязать букву “e” к команде erase. И теперь при нажатии этой буквы у вас старается символ перед курсором. Соответственно, набрать stty sane или stty erase не представляется возможным.
Что делать?? Шелл пусть для определённости будет bash.
Один из вариантов отгадки под катом.
stty $'san\x65'
Оригинал этой записи. Комментировать можно тут или там.
Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме
Tags:
no subject
no subject
no subject
no subject
ivlad@ivlad-mbp ~$ cat > rrr
sany
ivlad@ivlad-mbp ~$ cat rrr
sany
ivlad@ivlad-mbp ~$ cat rrr|tr x-z d-f
sane
ivlad@ivlad-mbp ~$
no subject
no subject
no subject
Upd: и без tr обойтись можно, ибо printf ;-)
Upd2: для удостоверения:
STANDARDS The printf command is expected to be compatible with the IEEE Std 1003.2 (``POSIX.2'') specification.</pre.no subject
stty: standard input: Invalid argument
что-то не так..
no subject
no subject
printf %s 'stty sanh </dhv/tty' | tr g-i d-f | sh
а объяснение , почему в предыдущем варианте stty ругнулся - это отдельная задачка для сисамдинов :)
no subject
no subject
`printf %s 'stty sanv' | tr u-w d-f`
no subject
no subject
`printf "stty san\x65"`
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
или вообще железный терминал..
no subject
no subject
Хорошая задачка.
no subject
# ls /
/bin
/etc
...
/var
После чего тупо мышкой выделить букву "е" и мышкой же вставить где надо :)
Иначе -- да, можно извращаться с заменами букв, с кодами букв, с реализацией всех действий в скриптах, а скрипты писать вне "неудачного" терминала, можно писать скрипты в редакторе, который позволяет копирование символов (тот же vi) и для старта брать файлик, который уже содержит символ "е", и т.д.
Хотя я бы первым делом постарался изменить эту кривую настройку терминала, убрать её нафиг. Иначе мазохизм получается.
no subject
после этого букву как ни вставляй - хоть с клавиатуры, хоть из буфера обмена, хоть Alt-кодами набирай - она всё равно будет распознана терминалом как команда удаления символа.
вот, собственно, в том и вопрос: КАК эту настройку терминала убрать. обычный способ: stty sane, но он не работает..
no subject
# ls / > ~/r
# vi ~/r
(жмём "r", правим строчку /etc на stty sane, остальное удаляем)
:qw!
# chmod u+x ~/r
# ~/r
покатит? А то у меня линукса под рукой нету. :)
no subject
no subject
Я просто не был на 100% уверен, что "stty sane" не аннулируется после выхода из скрипта (хотя это и обходится:
* правкой в vi ~/.bashrc
* запуском в том же ~/r шелла
* правкой алиасов баша -- назначением алиасу "sttysain" команды "stty sane"
и т.д.)
no subject
no subject
Это и составляло 99% моей уверенности. :) Но проверить всё же хотелось, благо недолго же.
no subject
набираем:
# mak
жмём TAB, получаем "make" возвращаем курсор под букву "е", жмём Ctrl+U, и дописываем "stty san"
выполняем команду и готово :)
no subject
no subject
ы?
no subject
no subject
no subject