Определить «ключевой код» вашего рабочего ключа (в моем случае § называется «раздел» или «шелкопряд»):
showkey
Запустите это, затем нажмите вашу рабочую клавишу. Должно появиться что-то вроде:
keycode 41 press
keycode 41 release
Итак, «41» - это ключевой код моего рабочего ключа.
Сопоставьте этот физический ключевой код с вашим пропавшим ключом.
код клавиши 41 = p | sudo loadkeys
Теперь, если вы не можете ввести недостающий ключ (например, "p"), получается ... интересно ...
Лучшее решение, которое я нашел, - это echo $ ' \ x70 '
в файл (сценарий bash), а затем войдите в него и используйте его в команде сценария. Допустим, вы хотите добавить отображение в свою процедуру загрузки - вы должны добавить его в файл ~ / .bashrc
.
echo keycode 41 = p >> ~/.bashrc
Теперь вам нужно отредактировать .bashrc и изменить последнюю строку с:
echo keycode 41 = p
на
echo keycode 41 = p | sudo loadkeys
. Теперь, если вы перезагрузитесь, он должен сопоставить ключ 41 (раздел) с «P».
Примечание 1: Следующее решение:
xmodmap -e "keycode 49 = P"
- хороший метод, НО он работает, только если вы загрузили X (Desktop). Это приятно, потому что не требует ужасного sudo, поэтому вы можете добавить его в свой автозагрузку ~ / .bashrc
.
Примечание 2: использование Ctrl + Shift + u и ввод 0050 (код ASCII для «P») не помогли.
В командной строке необходимо разделять команды с помощью ;
или &&
. Пробел просто не является разделителем для команд CLI.
При использовании &&
вторая команда будет выполнена, если первая команда завершится успешно (код выхода 0).
При ;
вторая команда будет выполнена независимо от статуса выхода первой команды.
Тест:
# a1;echo hello
bash: a1: command not found
hello
# a1 && echo hello
bash: a1: command not found
В скриптах первая команда и вторая команда разделяются символом \n
новой строки, который также распознается bash.
[Этот ответ неверен. Проблема связана с тем, что раскрытие переменных происходит перед назначением переменных в командной строке. См. Комментарии ниже. Кроме того, этот вопрос был объявлен дубликатом, и в исходном вопросе есть отличное обсуждение. -gt]
SUMAN_DEBUG = foo
- это назначение локальной переменной среды для локальной переменной, которая существует только для команды, которую она вводит в качестве предисловия. Во втором случае команды нет, потому что &&
инициирует список команд, где в вашем случае первая команда имеет значение null (поэтому переменная среды не имеет команды, на которую можно повлиять), а вторая выполняется, но для него не задана переменная окружения.
Вы можете добавить к назначению экспорт
, чтобы переменная стала глобальной переменной среды. Но тогда он будет сохраняться после того, как список команд будет завершен.
Другой вариант - поместить весь список команд в круглые скобки, чтобы выполнить их в подоболочке:
(export SUMAN_DEBUG=foo && echo $SUMAN_DEBUG)
В этом случае постоянная переменная среды будет установлена в подоболочке, и эта среда исчезнет, когда подоболочка завершит свою работу) .
См. Руководство по оболочке Bourne-again , раздел списков и раздел Среда для получения дополнительной информации.