2014-12-29 1 views
3

perl 스크립트에서 원격 호스트에 명령을 실행하려고합니다.perl 스크립트에서 awk를 사용하여 원격 쉘 호출

$check = `rsh host1 "df -k /backup/|tail -1|awk \'{print \$5}\'"`; 
print $check 

하지만 awk는 하나의 열 대신에 전체 문자열을 반환합니다.

/dev/md/dsk/d10  4133838 1936684 2155816 48% /

는 내가 거기 탈출의 문제가하지만 정확히 잘못된 모르는처럼 만

48% 

가 보이는이 필요합니다. 도와주세요. 펄 변수는 보간되지 않도록

+2

입니까? 끝 큰 따옴표는 어디에 있습니까? Whit 당신은 따옴표와 $를 벗어 납니까? – SMA

+1

확실치 않지만 명령을 따옴표로 제거하십시오. 즉,'$ check = \'rsh host1 df -k/backup/| tail -1 | awk '{print \ $ 5}'\';'해야한다 – Tensibai

+2

이것은 펄 코드가 아니다. 펄은'echo'가 아닌'print'를 사용합니다. 그것은 PHP일지도 모른다. – TLP

답변

3

하나의 옵션은 대신 구분 기호로 작은 따옴표로 qx을 사용하는 것입니다 :

$check = qx'rsh host1 "df -k /backup/|tail -1|awk \"{print \$5}\""'; 

내가 awk 명령 주위에 따옴표를 사용, 그래서 그것은 여전히 ​​필요하다 $5을 쉘 변수로 해석하지 못하도록 이스케이프 처리합니다.

로컬 컴퓨터에 tailawk를 실행하는 행복 경우, 따옴표 제거 할 수있는 수도 또는하지 않을 수

$check = qx'rsh host1 df -k /backup/|tail -1|awk "{print \$5}"'; 

이 다시 원격 컴퓨터에서 복사되는 더 많은 데이터 결과 문제가된다.

다른 방법으로는 펄을 사용하여 출력을 나눌 수 있으며, 완전히 문제를 방지 :이 작업은

$check = (split /\s+/, qx'rsh host1 "df -k /backup/|tail -1"')[4]; 
+1

정말 대단한 답변입니다! 팁 주셔서 감사합니다. – user947668