tty0tty
나는 PTY를 사용하여 널 모뎀을 만드는 프로그램을 자주 사용합니다 . 이제 자동화된 프로세스의 일부로 만들고 싶습니다.
시작하면 tty0tty
인쇄됩니다.
(/dev/pts/1) <=> (/dev/pts/2)
출력을 구문 분석하고 일치하는 결과를 다른 프로그램의 인수로 사용할 수 있습니까? 이 방법으로 다음 줄을 자동화할 수 있습니다.
linux$ tty0tty &
(/dev/pts/X) <=> (/dev/pts/Y)
linux$ someprogram /dev/pts/X &
linux$ microcom /dev/pts/Y
답변1
당신은 사용할 수 sed
있습니다프로세스 교체:
read left right < <(tty0tty | head -n 1 | sed -e 's/[()<=>]//g' &)
그 후에 는 $left
그렇습니다 ./dev/pts/X
right
/dev/pts/Y
이것은 약간의 속임수입니다. (
, )
, <
, =
및 문자를 >
아무것도 대체하지 않고 쉘의 단어 분리 기능에 의존합니다.
tty0tty
출력을 파이프로 연결하여 head
출력의 첫 번째(유일한) 줄만 얻고 영원히 차단하지 않습니다. 거기에서 sed
대체를 수행하는 명령 으로 들어간 다음 쉘의 read
bultin을 사용하여 쉘 변수 left
와 right
우리가 제공한 입력의 첫 번째 및 두 번째 단어를 바인딩합니다. 우리는 에서 해당 입력을 얻습니다 <(...)
. 서브셸에서 <(...)
실행 ...
하고 출력을 읽을 수 있는 파이프에 연결합니다. read
첫 번째 단어를 파이프라인으로 파이프 하면 파이프 <
라인이 이를 가져와서 /dev/pts/X /dev/pts/Y
우리가 원하는 두 단어로 분할합니다.
그런 다음 필요에 따라 실행할 수 있습니다 someprogram $left
.microcom $right