Outra maneira de usar %code% bash builtin:
%pre%Nota
Como @ Stéphane Chazelas apontou , em %code% você deve usar %code% para fazer aritmética %code% ou %code% para legibilidade.
Para portabilidade, use %code% como @Bernhard answer .
Eu tenho um problema contínuo com o Kubuntu 14.10, quando uso o computador eu acho que Sticky Keys está subitamente desativado. Eu reativo o recurso, mas depois de algum tempo (medido como três minutos para dias), o recurso está desativado novamente. As versões anteriores do Kubuntu não tinham esse problema, ou seja, eu usei Sticky Keys no Kubuntu sem restrições por anos. Não há menção de nada incomum em dmesg
.
Eu escrevi esta linha para informar-me do exato segundo em que as Pegajosas ficam desabilitadas, mas ainda não encontrei nenhuma razão:
date && echo 'start' && while true ; do xkbset q | md5sum | grep -v '087e8692adb9691fc4b4169471e2a077' && date && beep ; sleep 1 ; done
O problema pode não acontecer durante dias ou pode ocorrer subitamente a cada três minutos. O problema surge mesmo se eu não estiver usando ativamente o computador, ou seja, vou começar a apitar quando estou em outra sala.
Enlouquecedoramente, parece que muito raramente as Sticky Keys serão reativadas depois de apenas alguns segundos e, em seguida, desativadas novamente. Veja aqui que ativei o watcher em 13:48:35
e as Sticky Keys foram desativadas em 13:57:00
. Então, por algum motivo, de 13:57:09
Sticky Keys foi reabilitado antes de ser desativado novamente em 13:57:21
. Toda essa sequência ocorreu enquanto eu lavava a louça em outra sala:
Mon Aug 31 13:48:35 IDT 2015
start
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:00 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:01 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:02 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:03 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:04 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:06 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:07 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:08 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:09 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:21 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:22 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:23 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:24 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:25 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:27 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:28 IDT 2015
04974f8ab2d6f561ada83a2231e8fd80 -
Mon Aug 31 13:57:29 IDT 2015
^C
Deixei a máquina sem processos do usuário, ou seja, sem Firefox, Okular, Thunderbird, LibreOffice etc., mas o problema continua a ocorrer.
Como eu posso depurar este problema do ponto de vista do Linux? Certamente há algum evento que ocorre para sinalizar que as Sticky Keys são desativadas. Como posso determinar qual é esse evento? Este é o fim de dmesg
e não cresce quando o problema ocorre:
[437743.582168] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[437744.264830] usb 2-1.4: new full-speed USB device number 16 using ehci-pci
[437744.362557] usb 2-1.4: New USB device found, idVendor=045e, idProduct=07a5
[437744.362562] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[437744.362564] usb 2-1.4: Product: Microsoft® 2.4GHz Transceiver v9.0
[437744.362566] usb 2-1.4: Manufacturer: Microsoft
[437744.365110] input: Microsoft Microsoft® 2.4GHz Transceiver v9.0 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/0003:045E:07A5.0022/input/input47
[437744.365284] hid-generic 0003:045E:07A5.0022: input,hidraw0: USB HID v1.11 Keyboard [Microsoft Microsoft® 2.4GHz Transceiver v9.0] on usb-0000:00:1d.0-1.4/input0
[437744.369877] input: Microsoft Microsoft® 2.4GHz Transceiver v9.0 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.1/0003:045E:07A5.0023/input/input48
[437744.370016] hid-generic 0003:045E:07A5.0023: input,hidraw1: USB HID v1.11 Mouse [Microsoft Microsoft® 2.4GHz Transceiver v9.0] on usb-0000:00:1d.0-1.4/input1
[437744.389238] input: Microsoft Microsoft® 2.4GHz Transceiver v9.0 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.2/0003:045E:07A5.0024/input/input49
[437744.391328] hid-generic 0003:045E:07A5.0024: input,hidraw2: USB HID v1.11 Device [Microsoft Microsoft® 2.4GHz Transceiver v9.0] on usb-0000:00:1d.0-1.4/input2
[437763.788707] audit: type=1400 audit(1441003016.010:106): apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" name="/etc/hosts_files/hosts.mvps" pid=4855 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[437768.859972] audit: type=1400 audit(1441003021.087:107): apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" name="/etc/hosts_files/hosts.mvps" pid=4855 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[437773.948118] audit: type=1400 audit(1441003026.173:108): apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" name="/etc/hosts_files/hosts.mvps" pid=4855 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[437774.016734] audit: type=1400 audit(1441003026.241:109): apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" name="/etc/hosts_files/hosts.mvps" pid=4855 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[437779.140972] audit: type=1400 audit(1441003031.366:110): apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" name="/etc/hosts_files/hosts.mvps" pid=4855 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
Quais outros registros eu deveria estar olhando? Qual o registro que devo habilitar para encontrar o culpado? O comando xkbset q
mostra o estado dos Sticky Keys, idealmente eu encontraria de onde ele está obtendo suas informações e então registraria o que causa mudanças nele. Isso é possível?
Tags keyboard kde logs troubleshooting ubuntu
%code% parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador):
%pre%Como expressar a prioridade do operador no bash?
Outra maneira de usar %code% bash builtin:
%pre%Nota
Como @ Stéphane Chazelas apontou , em %code% você deve usar %code% para fazer aritmética %code% ou %code% para legibilidade.
Para portabilidade, use %code% como @Bernhard answer .
Você pode usar a expansão aritmética.
%pre%Na minha opinião pessoal, isso parece um pouco melhor do que usar %code% .
De %code%
%bl0ck_qu0te%Não há razão para usar %code% para aritmética em shells modernos.
POSIX define o operador de expansão %code% . Então você pode usar isso em todos os shells compatíveis com POSIX (o %code% de todos os Unix-gostos modernos, traço, bash, yash, mksh, zsh, fino, ksh ...).
%pre%%code% também introduziu um %code% builtin que é transmitido com o mesmo tipo de expressão aritmética, não expande para algo, mas retorna um status de saída com base em se a expressão é resolvida como 0 ou não, como em %code% :
%pre%No entanto, como a cotação a torna inábil e não muito legível (não na mesma proporção que %code% , é claro), %code% também introduziu uma forma alternativa %code% :
%pre%, que é muito mais legível e deve ser usado em seu lugar.
%code% e %code% só estão disponíveis em %code% , %code% e %code% . A sintaxe %code% deve ser preferida se a portabilidade para outros shells for necessária, %code% é necessário apenas para shells pré-POSIX semelhantes a Bourne (normalmente o shell Bourne ou versões antigas do shell Almquist).
Na frente não-Bourne, existem alguns shells com operador aritmético integrado:
%code% / %code% (na verdade, o primeiro shell Unix com avaliação aritmética incorporada):
%pre%%code% (com base em %code% )
%pre%como uma nota de história, a versão original do shell Almquist, como publicado no usenet em 1989, tinha um %code% construído (na verdade, mesclado com %code% ), mas foi removido posteriormente.
%code% é um comando externo, não é uma sintaxe especial do shell. Portanto, se você quiser que %code% veja os caracteres especiais do shell, será necessário protegê-los da análise do shell, citando-os. Além disso, %code% precisa que cada número e operador sejam passados como um parâmetro separado. Assim:
%pre%A menos que você esteja trabalhando em um antigo sistema unix dos anos 1970 ou 1980, há muito poucas razões para usar %code% . Antigamente, os shells não tinham uma maneira interna de realizar aritmética, e você precisava chamar o utilitário %code% . Todos os shells POSIX possuem aritmética interna por meio da sintaxe expansão aritmética .
%pre%A construção %code% se expande para o resultado da expressão aritmética (escrita em decimal). Bash, como a maioria das shells, suporta apenas módulos aritméticos inteiros 2 64 (ou módulo 2 32 para versões mais antigas do bash e algumas outras shells em máquinas de 32 bits). p>
O Bash oferece uma sintaxe de conveniência adicional quando você deseja realizar atribuições ou para testar se uma expressão é 0, mas não se importa com o resultado. Esta construção também existe em ksh e zsh, mas não em sh simples.
%pre%Além da aritmética inteira, %code% oferece algumas funções de manipulação de string. Eles também são incluídos pelos recursos de shells POSIX, exceto por um: %code% testa se a string corresponde ao regexp especificado. Um shell POSIX não pode fazer isso sem ferramentas externas, mas o bash pode com %code% (com um sintaxe diferente de regexp - %code% é uma ferramenta clássica e usa BRE, bash usa ERE).
A menos que você esteja mantendo scripts executados em sistemas de 20 anos, não é necessário saber que %code% já existiu. Use aritmética de shell.
Use parênteses com aspas:
%pre%As citações evitam que o bash interprete os parênteses como a sintaxe bash.
Se você tiver bc ...
%pre%