
다양한 키보드 레이아웃 간의 입력을 변환하는 간단한 bash 스크립트를 작성하고 싶습니다. 예를 들어, 내 시스템에 러시아어와 영어 레이아웃이 있고 'РуддЂ' 문자열을 이 스크립트에 전달하면 'Hello'가 출력되어야 합니다.
현재 다음 코드를 사용하고 있습니다.
echo "$@" | iconv -t cp1251 | tr $(echo "[йцукенгшщзхъфывапролджэ\\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,\"№;:?Ёё]" | iconv -t cp1251) "[qwertyuiop\[\]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`]"
명백한 단점이 있습니다.
- 내 시스템이 utf8을 사용하는데 사용할 수 없기
iconv
때문에 를 사용해야 합니다 .tr
- 모든 문자를 수동으로 입력해야 하므로 적용성이 부족하고 오류 발생 가능성이 높습니다.
비슷한 기능이 있다는 것을 알고 있지만 xneur
즉시 레이아웃을 전환하고 싶지 않고 요청 시 문자열을 번역하기만 하면 됩니다. 소스 코드를 살펴봤지만 xneur
유용한 내용을 찾지 못했습니다.
답변1
내 생각엔일부이를 위한 라이브러리가 존재합니다(Google 내부에서만 가능하다면?). 예를 들어,https://www.google.com/search?q=hjccbzроссия에 대한 결과를 올바르게 표시합니다. 그것은 작동하지 않습니다ghbdtn, 하지만 (아마도 이와 같이 привет의 철자를 틀리는 것이 흔한 농담이기 때문일까요?)
실제로 이러한 문자열을 검색하면 명확하게 직접적으로 적용할 수 있는 것은 없지만 절반 정도는 유망한 히트작이 나옵니다.
어쨌든 스크립트에 자신의 코드를 넣을 수 없는 이유는 없습니다. 이렇게 하면 코드를 올바르게 다시 입력할 필요가 없어집니다.
편집기에서 CP1251 인코딩을 사용하여 이를 저장하면 중첩을 피할 수 있습니다 iconv
.
#!/bin/sh
LC_ALL=C
iconv -t cp1251 |
tr 'йцукенгшщзхъфывапролджэ\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?Ёё' "qwertyuiop[]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`"
나생각하다tr
내가 수정하려고 시도한 인수 주위에 대괄호를 사용해야 한다는 잘못된 가정이 있었습니다 .
PATH
기억하기 쉽고 입력하기 쉬운 이름으로 의 위치에 저장하면 chmod +x
해당 파일이 저장됩니다.
답변2
Give 레이아웃을 사용하면 동일한 문자를 여러 가지 방법으로 입력할 수 있기 때문에 이것이 가능하다고 생각하지 않습니다. 예를 들어 프랑스어 레이아웃에서는 를 활성화 CapsLock
하고 입력하거나 - - - 를 é
사용하여 “É”를 입력할 수 있습니다 .Compose
'
Shift
e