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
. 여기서는 차이가 없으며 메커니즘은 동일합니다. 그런 다음 vim
PID를 찾아 디렉토리를 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/2
echo
/dev/pts/2
vim
내가 아는 한, 터미널은 키보드에서만 입력을 받을 수 있으며 다른 방법으로는 입력을 전달할 수 없습니다. 따라서 명령을 작업자 프로세스에 전달하는 다른 방법을 찾아야 합니다.
echo
또한 귀하의 경우 출력에 개행 문자를 추가하므로 계단을 통해 인쇄가 발생한다는 점을 명심하십시오 j
. 로 변경하면 echo -n j
출력은 jjj
개행 없이 - 가 됩니다.