Однострочное поведение набора переменных env [дубликат]

  1. Определить «ключевой код» вашего рабочего ключа (в моем случае § называется «раздел» или «шелкопряд»):

    showkey

Запустите это, затем нажмите вашу рабочую клавишу. Должно появиться что-то вроде:

keycode 41 press
keycode 41 release

Итак, «41» - это ключевой код моего рабочего ключа.

  1. Сопоставьте этот физический ключевой код с вашим пропавшим ключом.

    код клавиши 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») не помогли.

1
12.12.2016, 01:00
2 ответа

В командной строке необходимо разделять команды с помощью ; или &&. Пробел просто не является разделителем для команд CLI.

При использовании && вторая команда будет выполнена, если первая команда завершится успешно (код выхода 0).

При ; вторая команда будет выполнена независимо от статуса выхода первой команды.

Тест:

# a1;echo hello
bash: a1: command not found
hello
# a1 && echo hello
bash: a1: command not found

В скриптах первая команда и вторая команда разделяются символом \n новой строки, который также распознается bash.

1
27.01.2020, 23:25

[Этот ответ неверен. Проблема связана с тем, что раскрытие переменных происходит перед назначением переменных в командной строке. См. Комментарии ниже. Кроме того, этот вопрос был объявлен дубликатом, и в исходном вопросе есть отличное обсуждение. -gt]

SUMAN_DEBUG = foo - это назначение локальной переменной среды для локальной переменной, которая существует только для команды, которую она вводит в качестве предисловия. Во втором случае команды нет, потому что && инициирует список команд, где в вашем случае первая команда имеет значение null (поэтому переменная среды не имеет команды, на которую можно повлиять), а вторая выполняется, но для него не задана переменная окружения.

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

Другой вариант - поместить весь список команд в круглые скобки, чтобы выполнить их в подоболочке:

(export SUMAN_DEBUG=foo && echo $SUMAN_DEBUG)

В этом случае постоянная переменная среды будет установлена ​​в подоболочке, и эта среда исчезнет, ​​когда подоболочка завершит свою работу) .

См. Руководство по оболочке Bourne-again , раздел списков и раздел Среда для получения дополнительной информации.

5
27.01.2020, 23:25

Теги

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