prepend
다음 입력 프롬프트에 bash 명령의 반복되는 용어를 자동으로 배치하는 간단한 함수(아래)를 정의했습니다 . 예를 들어 prepend git
터미널에 입력하면 다음 입력이 모두 git
입력되어 있어야 합니다. 대부분의 경우 prepend
이 작업이 수행되지만 무작위로 보이는 경우 prepend
단어의 첫 글자가 잘립니다(예: 다음 입력 프롬프트에서 생성됨 $prepend sensors
).$ensors
왜 이런 일이 발생하는지, 어떻게 해결하는지 알고 싶습니다. 그러나 입력 프롬프트에 텍스트를 입력하는 대체/표준 방법이 있다면 이를 다르게 구현해도 괜찮습니다.
#!/bin/bash
#stty to stop text from being displayed before $PS1
function prepend {
if ! [ -z "$1" ]
then
PROMPT_COMMAND="stty -echo && xdotool type $1 && stty echo"
set PROMPT_COMMAND
else
unset PROMPT_COMMAND
fi
}
답변1
해당 문자의 키를 이미 누르고 있으면 첫 번째 문자가 잘린다고 생각합니다. 이를 실제로 보려면 터미널에서 다음 명령을 실행하면 됩니다.
$ xdotool type foof
f
키를 누르기 전에 놓으면 인쇄 Return
가 되고 , foof
마지막 키를 누른 f
상태에서 누르면 Return
인쇄가 됩니다 oof
. 나는 xdotool keydown
이 키를 이미 눌렀을 때 아무런 효과가 없는 이벤트를 전송하기 때문에 이런 일이 발생한다고 생각합니다 .
이벤트를 수동으로 보내면 이 문제를 해결할 수 있습니다 keyup
.
$ xdotool keyup f type foof
항상 foof
올바르게 인쇄됩니다.
귀하의 경우 이는 좀 더 복잡합니다. 올바른 문자를 보내려면 문자열의 첫 번째 문자를 감지해야 합니다 keyup
. 그러나 그렇게 하면 이 접근 방식도 효과가 있을 것입니다.