2014-11-05 3 views
1

모두 잘하고 있기를 바랍니다.스크립트 예상 - 특정 지점에서 로깅 시작 및 특정 지점에서 중지

저는 최근 몇 명의 네트워크 엔지니어가 사용할 수있는 작은 유틸리티를 함께 제공하기 시작했습니다. 함수는 회로 정보를 검색하여 좋은 형식으로 파싱하고 출력하는 것입니다. 물론,이 작업의 일부는 필요한 상자에 SSH 연결을 포함하고 원하는 출력을 생성하기 위해 명령을 실행하는 것과 관련이 있습니다.

여기에 제가 현재 가지고있는 스크립트가 있습니다. 그것은 잘 작동, 원하는 명령을 실행, 더 많은 회로를 표시하는 시스템을 묻는 몇 가지 공백을 보냅니다 그리고 종료하여 종료합니다. 이 모든 것은 상자의 호스트 이름과 동일한 이름의 파일에 기록됩니다. 큰.

그러나 생성 된 파일을 읽었을 때 내가 실행 한 명령과 연결시 불필요한 통계를 포함하여 많은 양의 데이터가 포함되어 있다는 것을 알았을 때 제 문제가 명백합니다. 난 단지 명령을 발행 할 때 로깅을 찾고, 이후에는이를 차단하기 위해 찾고있다. 내가 기대에 익숙하지 않기 때문에, 나는 정말로 어떤 지침을 주셔서 감사합니다.

PS. 내가 어리석은 짓을 한거면 죄송합니다. 나는 언어 자체에 매우 익숙하지 않다.

감사합니다.

set ip [lindex $argv 0] 
set hostname [lindex $argv 1] 
set timeout 10 
set user "" 
set password "" 

# Spawning the ssh session 
spawn ssh $ip -l $user 

# Awaiting prompt for password 
expect "[email protected]$ip's password:" 
sleep 1; 
# Awaiting prompt 
send "$password\n" 
sleep 2 
log_file -noappend $hostname; 
send "terminal length 0\n" 
sleep 1 
send "show int desc\n" 
sleep 5 
send "exit\n" 
interact 
exit 
+0

각'send' 명령 다음에'expect' 문을 추가하고 절대적으로 필요한 경우'sleep'을 사용하십시오. 말하자면, 그것은 모든 출력을 가지고 있습니다, 당신은 로그인 자체가 ssh 로그인의 시작부터 로깅을 의미합니까? – Dinesh

답변

1

원하는 위치에 log_file을 배치하여 출력을 제어 할 수 있습니다.

로깅을 시작하려는 경우, 당신은 (이미 코드가)와 같은 라인 콘솔에 인쇄 무엇이든

log_file my_log_file.log 

my_log_file.log라는 이름의 파일에 이러한 명령 실행 후 기록됩니다를 추가 할 수 있습니다 . 파일이 이미 해당 위치에 있으면 기본적으로 추가됩니다. 플래그 -noappend을 추가하면 기존 파일을 겹쳐 쓰게됩니다.

log_file -noappend fresh.log 

당신이 로깅을 중지 단순히 출력이 저장되지 않습니다 생성 된 어떤이 시점에서

log_file 

같은

으로 인수없이 LOG_FILE를 제공합니다.

예를 들어,

spawn ssh some_ip 
expect some_thing 
#Login code here 
log_file output.log; # Start logging 
#some actions here 
log_file; # stopping logging here. 
# some more actions 
# end 

가 여러 번 공간을 보내는의 일부 스위치에 로그인하여 몇 가지 자격 증명을 제공하고 일부 명령은 다음과 같은 것을 할 수 있습니다 실행된다. 대신 다음과 같이 터미널 길이를 0으로 설정할 수 있습니다.

send "term len 0" 
expect "prompt" 

이렇게하면 여러 번 보낼 때 오버 헤드가 발생하지 않습니다. 또한, 귀하의 경우, 공백은 예상 할 것이 없으므로 스위치로 매우 빠르게 전송됩니다. 당신은 여전히 ​​다음, '장기 렌 0'없이 그것을 할 관심이 있다면 적어도 당신은 일을이 방법이 있기 때문에 바람직하지 않습니다, 다음과 같이, 루프에서

for { set i 0 } { $i < 10 } { incr i } { 
    send " " 
    expect "something" 
} 

를 코드를 넣을 수 있지만, 10 개 이상의 공백을 보낼 필요가있을 경우 실패합니다.

+0

슬프게도 명령 바로 앞에 로그 파일을 작성하여 그에 따라 로깅을 시작한다는 제안이 효과적이지 않은 것 같습니다. 대신 대본은 박쥐에서 곧바로 기록되어 모든 것을 기록합니다. 아마도 그것은 모두 저장되어 있고 로그 파일의 이름을 말하면 잠시 덤프됩니까? – Hugh

+0

이유가 궁금합니다. 질문에 현재 코드를 붙여넣고 이전 코드를 제거 할 수 있습니까? – Dinesh

+0

안녕 Dinesh. 나는 앞으로 20 분 안에 그렇게 할 것이다. – Hugh

0

나는 늦게 여기에 아마,하지만 요구 사항이 로그 파일에 기대 스크립트의 특정 부분을 기록하는 경우, 다음 로깅

<expect script statements here> 

다음에 시작

log_file <log file name> 

를 사용 여기서 로깅을 중지하려면 다음을 작성하십시오.

log_file 

에스.

관련 문제