2010-12-08 2 views
1

화면을 통해 실행중인 대화식 명령에 입력을 보내려고합니다. 여기에 위의 명령은 화면 분리 모드에서 대화 형 psql 프로그램을 실행 내 초기 명령readreg 및 붙여 넣기를 통해 분리 된 '화면'에 대한 입력 전송시 문제가 발생했습니다.

screen -L -c ./customrc -S psql -d -m /opt/PostgreSQL/9.0/bin/psql 

입니다. customrc 내가 화면

screen -S psql -X readreg p psqlcommands.sql 
screen -S psql -X paste p 

문제로 실행 PSQL에 입력을 보내 두 명령을 다음 사용하고 있습니다 (I 폴링에 의해 다른 프로세스에서 읽습니다)의 출력에 대한 로그 파일

을 정의하는 데 사용됩니다 적어도 한 번 화면을 다시 부착하지 않으면 위의 명령이 작동하지 않는다는 것입니다. 화면을 연결하고 분리하면 위의 명령이 예상대로 작동합니다. 백그라운드 자바 프로세스를 통해 이러한 명령을 실행해야하므로 대화 형 셸 (bash)을 사용할 수 없습니다. 내 목표는 대화 형 모드에서 psql을 실행하고 입력을 전달하고 로그 파일을 통해 출력을 캡처하는 것입니다.

지금까지 xterm (또는 konsole 또는 gnome-terminal)을 통해 첨부 모드에서 화면을 실행하려고 시도했지만 readreg/paste를 사용하여 분리했지만 xterm을 프로덕션 환경에서 사용할 수 없다는 것을 알고 있습니다. 또한/proc/fd/0 출력을 보내려고했지만 키보드에서 '엔터'를 에뮬레이션 할 수 없습니다 (나는 psql에서 받아 들여지도록 출력을 첨부하고 눌러야합니다). 파이프와 FIFO가 도움이 될지도 모르겠지만 screen과 psql을 사용하여 진행하는 방법을 알 수는 없습니다.

추가 힌트 또는 해결 방법을 알려드립니다.

우스만을 주셔서 감사합니다.

답변

1

최종 답변 : '붙여 넣기'명령을 실행하기 위해 DISPLAY를 한 번 이상 필요로하는 'GNU 화면'의 버그/기능입니다. 가능한 문제 해결 방법은 다음과 같습니다.

마지막으로 psql을 파이프 및 화면과 함께 사용하는 방법을 알아 냈습니다. 여기에 솔루션입니다 :

cat ./mycommands.sql > psql.pipe 

내가

screen -S psql -X quit 

을 사용, 화면 및 종료 psql 프로그램에서 종료하려면 : 그 후

mkfifo psql.pipe 
screen -L -c ./customrc -S psql -d -m bash -i -c "while (true); do cat psql.pipe; done | /opt/PostgreSQL/9.0/bin/psql -a" 

내가 고양이 수, 파이프 내 명령

편집 : (마지막으로) 화면 명령을 사용하지 않고 내 문제에 대한 해결책을 알아 냈어. 'empty'유틸리티를 만나십시오.

empty -f -i psql.in -o psql.o -p psql.pid <psqlpath> 

이 내가 사용하는 기존 솔루션 (있는 psql의 대화식 모드에서 실행되지 않습니다) 반대로 완전 대화 형 모드로 실행하는 psql를 할 수 있습니다.

감사합니다. 우스만

+0

서브 쉘에서'true'를 실행할 필요가 없습니다. 'true'가 정상적으로 작동합니다. –

+0

하위 쉘을 통해 실행하지 않으면 일종의 구문 오류가 발생합니다. –

1

은 당신이 당신의 readregpaste 후이 "를 눌러 입력"을 시도 했습니까?

screen -S psql -X stuff $'\n' 
+0

예, 처음에는 분리 모드 (예 : -d -m)로 화면을 시작 했으므로 작동하지 않습니다. 'process reg'명령에서도 같은 일이 발생합니다. 적어도 한 번 화면을 다시 연결하면 모든 명령이 작동합니다. 어떻게 든 화면의 버퍼는 현재 디스플레이에 할당되지 않으면 초기화되지 않습니다. –

0

나는 이와 동일한 문제가있었습니다. 내 해결 방법은

그래서이이 도움이

#change the hardstatus settings to give an window list at the bottom of the                   
#Set this first otherwise messes with bash profile 
hardstatus alwayslastline  
#screen, with the time and date and with the current window highlighted  
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}' 
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]' 

#set scrollback 
defscrollback 4096 


#detach 
detach 

희망 내 SCREENRC는 "분리"화면이 부착 된 시작하지만, 그것을 마지막 명령 인 SCREENRC 파일을 전달했다

P

+0

그래서 "screen -c screenrc_detaching"과 같이 화면을 실행합니다. – PiersyP

2

음 사용할 수 있습니다

screen -S psql -p 0 -X stuff $'\n' 

이상 (저에게 맞는 작품)

screen -S mname -p 0 -X stuff `echo -ne '\015'` 

-p 0이 필요합니다.

관련 문제