2016-06-20 2 views
2

나는 엘 캐피 탄을 운영하는 Mac에서 일하고 있습니다.로그 스크립트 (엘 캐피 탄)에 대한 핑 결과

내가 작업 한 프로젝트의 경우 ping 시간을 기록하기위한 간단한 스크립트를 작성하려고합니다. 나는 그것이 생각했던 것처럼 간단하지 않다는 결론에 도달했습니다. 내 첫 번째 문제는 변수를 사용할 때 "모호한 리디렉션"이었습니다. 내가 $INPUT Ambiguous redirect

의 도움으로, 변수 따옴표를 사용하는 것을 수정했습니다하지만 다음 스크립트를 실행할 때 지금은 다른 오류가 발생합니다 :

#!/bin/sh 

set PINGDELAY=1.5 
set PINGIP=google.nl 
set PINGLOG=~/Library/Logs/doctorping.log 

sudo ping -i "$PINGDELAY" "$PINGIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$PINGLOG" 

오류는 그것의

ping: invalid timing interval: `' 

입니다 아마 내가 간과 해 왔던 부분일지도 모르지만 스크립팅과 프로그래밍에 관해서는 정말 멍청하다.

내 목표는 텍스트를 처리하거나 비트를 추출하는 것이 아니라 연결을 모니터링하고 결과를 로그에 기록하는 것입니다. 아마도 로그 라인의 수를 제한하는 것이 현명 할 것입니다. (물론 누군가가 올바른 방향으로 나를 가리킬 수 있다면 높이 평가 될 것이지만, 우선 첫번째 것)

고마워!

답변

2

set 명령은 쉘 변수를 설정하지 않습니다. 쉘 실행 옵션을 설정하거나 스크립트의 인수 목록을 바꾸는 데 사용됩니다. 그냥 놔둬. 또한 소문자 (또는 대소 문자가 혼용되는) 변수 이름을 사용하여 실수로 변수 중 하나가 쉘에 특별한 것을 사용하지 않도록하는 것이 가장 좋습니다. 다음은 내가 얻은 것입니다.

#!/bin/sh 

pingdelay=1.5 
pingIP=google.nl 
pinglog=~/Library/Logs/doctorping.log 

sudo ping -i "$pingdelay" "$pingIP" | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' >> "$pinglog" 
+0

대문자 사용에 대한 좋은 지적. –

+0

지금은 매력처럼 작동합니다! 감사! :) – user263700

2

당신이 sh 대신이 같은 bash를 사용하는 경우 그것은 잘 작동 :

#!/bin/bash -xv 

PINGDELAY=1.5 
PINGIP=google.nl 
PINGLOG=~/Library/Logs/doctorping.log 

sudo ping -i "$PINGDELAY" "$PINGIP" 

-xv 그냥 디버깅을 위해 - 당신은 안전하게 제거 할 수 있습니다.

관련 문제