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