
Quero escrever um script bash simples que traduza a entrada entre diferentes layouts de teclado. Por exemplo, se meu sistema tiver layouts em russo e inglês e eu estiver passando a string 'Руддщ' para este script, ele deverá gerar 'Hello'.
Atualmente estou usando este código:
echo "$@" | iconv -t cp1251 | tr $(echo "[йцукенгшщзхъфывапролджэ\\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,\"№;:?Ёё]" | iconv -t cp1251) "[qwertyuiop\[\]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`]"
Existem desvantagens óbvias:
- Tenho que usar
iconv
, pois meu sistema usa utf8 etr
não consigo usar. - Tenho que digitar todos os caracteres manualmente, o que leva à falta de aplicabilidade e à alta possibilidade de erros.
Eu sei que xneur
tem funcionalidade semelhante, mas não quero mudar o layout rapidamente, apenas traduza as strings mediante solicitação. Examinei xneur
o código-fonte, mas não encontrei nada útil.
Responder1
Eu achoalgunsexiste uma biblioteca para isso (mesmo que apenas internamente no Google?). Por exemplo,https://www.google.com/search?q=hjccbzexibe corretamente os resultados para россия. Não funciona paragbdtn, no entanto (talvez porque erros ortográficos привет como este sejam uma piada interna comum?)
Na verdade, a busca por essas cordas traz alguns resultados meio promissores, embora nada claramente aplicável diretamente.
De qualquer forma, não há razão para você não poder colocar seu próprio código em um script, o que obviamente elimina a necessidade de redigitá-lo corretamente.
Se você salvar isso com uma codificação CP1251 do seu editor, poderá evitar o aninhado iconv
:
#!/bin/sh
LC_ALL=C
iconv -t cp1251 |
tr 'йцукенгшщзхъфывапролджэ\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?Ёё' "qwertyuiop[]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`"
EUpensarvocê teve uma falsa suposição sobre a necessidade de usar colchetes em torno dos argumentos tr
que também tentei corrigir.
Salve em um local em seu computador PATH
com um nome memorável e fácil de digitar, chmod +x
e pronto.
Responder2
Não imagino que isso seja possível, pois, com um layout específico, pode haver várias maneiras de digitar o mesmo caractere. Por exemplo, com meu layout francês, posso digitar “É” habilitando CapsLock
e digitando é
, ou por Compose
- '
- Shift
- e
.