удар - неправильная привязка сочетания клавиш с control+alt+space

Я не могу прокомментировать все же для просьбы больше деталей о вопросе, таким образом, я предположу: у Вас есть файл, содержащий список чисел, Вы хотите запросить URL с помощью каждого из этих чисел как параметры и сохранить результаты в одном файле.

Используя wget в сценарии оболочки:

#!/bin/sh
PARAMETER_FILE="/path/to/parameter/file"
URL="http://203.90.117.109/wds_cdma/wds.aspx?min="
OUTPUT_FILE="/path/to/output/file"

IFS="
"

for param in $(cat "$PARAMETER_FILE")
do
  wget "${URL}${param}" >> "$OUTPUT_FILE"
done
3
22.03.2015, 20:52
2 ответа

Ваш гноме-терминал (на самом деле базовый VTE-0,34) испускает неправильную последовательность для Ctrl + ALT + пространство . Ошибка ( https://bugzilla.gnome.org/show_bug.cgi?id=710349 ) была зафиксирована в VTE-0,36.

Если вы не бойтесь немного взлома, и вы в состоянии безопасно вернуть вещи в случае проблем, вы можете попытаться установить VTE-0,36 на ваш Ubuntu 14.04. Вы получите много других исправлений и полномочий вместе с этим. Вы можете найти PPA или пакет в постановке Gnome3 или компилируйте его для себя. Обновление этой версии VTe не требует прикосновения к любым другим программным компонентам. Требуется полный перезапуск гноме-терминала (закрыть все окна).

1
27.01.2020, 21:19

Эмулятор терминала (в Вашем случае - Gnome-терминал) преобразует комбинации клавиш типа Ctrl+Alt+Space (который получает как Space keyym с клавишами Ctrl и мета-модификаторами) в последовательности байтов. Символы текста типа a и пробел посылаются как есть; ключи, которые не соответствуют символам, посылаются как управляющие символы, когда они есть (например, байт 13 = возврат каретки = Return, байт 9 = табуляция = Tab) и как экранирующие последовательности, начинающиеся с байта 27 = экранирование, если его нет. Alt+символ посылается как escape, за которым следует этот символ (во всех смыслах и целях, в типичных конфигурациях в настоящее время, относитесь к "Alt" и "Meta" как к синонимам - я не буду вдаваться в эту тему в данной заметке). Смотрите также Как работает клавиатурный ввод и вывод текста?

Ctrl+символ посылается как управляющий символ, если он есть (e. g. Ctrl+A или Ctrl+Shift+A → байт 1 = ^A). Символа управляющего пространства нет, но по историческим причинам комбинация клавиш Ctrl+Space обычно передается в виде байта 0 = ^@.

Последовательность передаваемых клавиш можно посмотреть, нажав Ctrl+V в командной строке bash, а затем интересующую вас комбинацию клавиш или клавиш. Ctrl+V говорит bash вставить следующий символ, каким бы он ни был, вместо того, чтобы интерпретировать его как команду.

Было бы логично передать Ctrl+Alt+Space как двухбайтовую последовательность 27, 0 = escape, ^@. К сожалению, Gnome-терминал этого не делает, вместо него посылает 27, 32 = escape, space. Последовательности ключей, посылаемые Gnome-терминалом, не могут быть сконфигурированы (необходимо заплатить библиотеку VTE). Поэтому, если вы хотите иметь возможность использовать Ctrl+Alt+Space в терминале, у вас есть несколько возможностей:

  • Использовать другой терминальный эмулятор. В Ubuntu их около 40.
  • Отредактируйте исходный код библиотеки VTE, чтобы она послала другую экранирующую последовательность. Возможно, вы захотите предложить это в качестве усовершенствования.
  • Может быть, используйте LD_PRELOAD для патча вызовов от Gnome-терминала к libvte. Я не проверял, практично ли это, и в любом случае это будет громоздко - если вас это так волнует, используйте другой терминальный эмулятор.
  • Настройте оконный менеджер или внешнюю программу на изменение Ctrl+Alt+Space на Esc Ctrl+Space при активном окне Gnome-терминала. Это непросто сделать, не нарушая работу других приложений в большинстве сред.

Короче говоря, если вы хотите использовать эту привязку, вам понадобится другой терминальный эмулятор, например, xterm (где экранирующие последовательности для комбинаций клавиш полностью настраиваются).

3
27.01.2020, 21:19

Теги

Похожие вопросы