Veamos qué sucede realmente aquí:
$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '
Con set -x
obtienes un seguimiento de qué comandos se ejecutan realmente (usa set +x
para desactivar esto ). Aquí vemos que la variable $var
se expande a una cadena vacía antes de que se ejecute el shell secundario bash -c
.
Esto se debe a las comillas dobles del argumento de bash -c
, lo que hará que el shell actual realice una expansión variable dentro de la cadena. Dado que la variable var
no está definida o está vacía en el shell actual, su expansión es la cadena vacía.
Para proteger una cadena de la "interferencia" del shell, use comillas simples:
$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3
... o escapar de$
(En mi opinión, no tan agradable):
$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3
Почитав страницу xcape на github , я нашел простое решение. В прошлом году был объединен запрос на извлечение , который позволяет передавать коды клавиш вместо символов клавиш в xcape.
Решение:
xcape -e "#66=Escape"
Как получить правильный код ключа?
xev -event keyboard
Нажмите клавишу, которую вы хотите изменить. Тогда вы должны увидеть что-то подобное:
KeyPress event, serial 29, synthetic NO, window 0x4c00001,
root 0x190, subw 0x0, time 771139, (110,626), root:(204,711),
state 0x0, keycode 66 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 51
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
Там вы найдете свой код ключа (66 в этом примере ).