2017-12-11 11 views
1

다음은 셸 스크립트에서 expect로 실행하려고하는 코드입니다.셸에서 명령 출력 보내기

내가 갖는 출력은

date +%d%m%y 
111217 

명령 (날짜 + % D %의 m의 %의 Y)를 억제 만 variale의 날짜 1 출력을 저장하기위한 어떤 방법이있다

send "date +%d%m%y \n" 
set date1 "$expect_out(buffer)" 
puts "$date1" 
expect "#" 

?

+0

이 코드는 나를 위해 작동하지 않습니다 작성할 수 있습니다. [mcve]를 게시하십시오. –

+0

@emily, 당신은 이것이 [tag : expect] 코드라는 것을 알았습니까? –

+0

네, 코드가 기대됩니다. 하지만'expect' 문이 없으므로 OP가 어떻게'$ expect_out (buffer)'을 얻었는지 궁금합니다. –

답변

0

하는이 시도 : 첫 번째 줄 (명령) 및 마지막 줄 (프롬프트) 사이에있는 텍스트를 선택,

send "date +%d%m%y\r"   ;# typically we use \r to "hit enter" 
expect -re {\m(\d{6})\M} 
set date1 "$expect_out(1,string)" 
puts "$date1" 
expect "#" 

더 일반적으로 전체 단어로 6 개 자리를 볼 것으로 예상, 당신은 할 수있다 : _ 정규식 전체 매칭 텍스트를 보유하며, date1 만 캡처 텍스트를 보유 할 스로인 얻어 변수이다

lassign [regexp -inline {.*?\n(.*)\r\n#} $expect_out(buffer)] _ date1 

.

Tcl 정규식 구문은 https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm을 참조하십시오.


lassign없이, 당신은

regexp {.*?\n(.*)\r\n#} $expect_out(buffer) _ date1 
+0

lassign이 내 시스템에서 작동하지 않습니다. 명령의 출력 만 얻을 수있는 다른 방법이 있습니까? –