set -f
— самый удобный способ разбиения поля без подстановки.
В bash
вы можете проверить, установлен ли параметр оболочки, с помощью теста -o
. Поэтому вы можете сделать это:
if [ ! -o noglob ]; then
set -f
trap 'set +f' RETURN
fi
Это обнаружит состояние noglob
параметра оболочки (длинное имя дляset -f
). Если он не установлен, он устанавливается и ловушка RETURN
устанавливается. Ловушка отключит параметр оболочки noglob
, когда сценарий будет выполнен, , если источник сценария . Если сценарий не получен, ловушка ничего не сделает.
Интересное примечание :Сценарий с исходным кодом очень похож на функцию оболочки.
Последовательность на самом деле Escape [A , и она является частью набора, который был принят Ecma в 1976 году в качестве стандарта ECMA -48 , поддерживаемый ANSI как отдельный, но почти идентичный стандарт в течение ряда лет (, позже отозванный ), а также ратифицированный ISO/IEC 6429 в пути. Результатом этой множественной стандартизации является то, что, хотя на них часто ссылаются как на escape-коды ANSI, их следует правильно называть функциями управления ECMA -48*.
Обычная причина появления [A
на экране вместо действия заключается в том, что начальный код Escape был неожиданно поглощен. Я не могу воспроизвести это на своей клавиатуре, если сначала не нажму Ctrl V , что указывает драйверу терминальной строки обрабатывать следующий символ как литерал.
Итак, мы можем получить эту последовательность Ctrl VEscape [A , производя видимый вывод [A
.
Вы заметите, что если вы нажмете последовательность символов Escape [A в быстрой последовательности, курсор действительно переместится вверх. Однако, если вы сделаете паузу после первого символа, вы не сможете получить движение курсора, потому что с символом Escape связан тайм-аут. На медленных последовательных линиях к системам UNIX это было настоящей проблемой, и ближайшим эквивалентом является медленное или прерывистое сетевое соединение с небольшой задержкой во время передачи этой последовательности.
Теперь к вашему вопросу, как предотвратить это. Вы мало что можете сделать, если у вас прерывистое сетевое соединение, за исключением, возможно, использования одной из альтернативных последовательностей, таких как Escapek ... k ... k , доступные при редактировании команды в "режиме vi"(set -o vi
).
*Похоже, JavaScript следует называть ECMAScript, я полагаю
Все очень хорошие ответы. Быстро и грязно использовать h,j,k,l в качестве клавиш со стрелками. Или установите полный пакет vim. Дистрибутив Ubuntu, если я правильно помню, по умолчанию использует vim?? -среда выполнения, если просто установить vim?? то проблема "решается" сама собой. ?? независимо от последней версии полного пакета. На Ubuntu apt-cache search vim
скажу вам.
h = вверх, j = вниз, k = влево, l = вправо