Ranger와 같은 CLI 터미널 애플리케이션의 키 입력을 자동화하는 방법은 무엇입니까?

Ranger와 같은 CLI 터미널 애플리케이션의 키 입력을 자동화하는 방법은 무엇입니까?

Ranger를 실행하고 PID를 얻으면 Ranger에 키 입력을 보내고 싶습니다.

출력 ps aux | grep '[/]usr/bin/python -O /usr/bin/ranger':

chris     5054  3.1  0.1 116248 27828 pts/0    S+   16:57   0:00 /usr/bin/python -O /usr/bin/ranger

다음에서https://serverfault.com/a/178470/135542j, 값을 STDIN으로 보내면 출력이 혼합된 echo "j" > /proc/5440/fd/0것 같습니다 j(명령을 몇 번 실행한 후).

여기에 이미지 설명을 입력하세요.

j그러나 키보드를 누르면 올바르게 반응합니다.

답변1

이 때문입니다,

echo "j" > /proc/5440/fd/0 

실제로는 다음과 같습니다( pts상황에 따라 숫자가 다를 수 있음).

echo "j" > /dev/pts/2 

설명하다:

그렇지 않았기 ranger때문에 달리고 있습니다 vim. 여기서는 차이가 없으며 메커니즘은 동일합니다. 그런 다음 vimPID를 찾아 디렉토리를 6466살펴보았습니다 ./proc/6466/fd

$ ls -l /proc/6466/fd
lrwx------ 1 minimax minimax 64 Nov 20 01:20 0 -> /dev/pts/2
lrwx------ 1 minimax minimax 64 Nov 20 01:20 1 -> /dev/pts/2
lrwx------ 1 minimax minimax 64 Nov 20 01:20 2 -> /dev/pts/2

프로세스의 모든 파일 설명자는 vim현재 터미널에 대한 심볼릭 링크입니다. 따라서 이는 문자 그대로 "명령의 출력을 터미널 파일로 리디렉션" echo "j" > /proc/5440/fd/0으로 번역됩니다 . 프로세스의 표준 입력이 아닙니다 .echo "j" > /dev/pts/2echo/dev/pts/2vim

내가 아는 한, 터미널은 키보드에서만 입력을 받을 수 있으며 다른 방법으로는 입력을 전달할 수 없습니다. 따라서 명령을 작업자 프로세스에 전달하는 다른 방법을 찾아야 합니다.

echo또한 귀하의 경우 출력에 개행 문자를 추가하므로 계단을 통해 인쇄가 발생한다는 점을 명심하십시오 j. 로 변경하면 echo -n j출력은 jjj개행 없이 - 가 됩니다.

관련 정보