2016-06-10 7 views
0

두 파일 이름 사이에 개행 문자가 삽입됩니다. 어떻게 이것을 피합니까? 실행 중에 comm perl 스크립트의 개행 문자

$diff = `comm -3 "/tmp/${PATH1U}_${SITE1}_s_${USER} /tmp/${PATH2U}_${SITE2}_s_${USER}"|wc -l`; 

오류 메시지이다

통신/TMP/FILE1 \ 않음/TMP/파일 2 \ 없음 '

+1

'을 읽은 후 파일 이름을 chomp'. – Sobrique

+1

오류 메시지는 예상 된 2 개의 파일 이름이 아닌'comm'에 하나의 파일 이름 만 전달한다는 사실을 나타냅니다. 당신은 "한 세트가 아닌"2 세트를 사용해야합니다. – toolic

답변

4

두가지 문제`후 피연산자 누락 :

  • $USER의 값은 개행으로 끝납니다. 너 chomp 멀리 수 있습니다. 수정 :

    chomp($USER); 
    
  • 2 개가 아닌 매우 길고 잘못된 경로 하나를 전달합니다. 수정 :

    `comm -3 '/tmp/${PATH1U}_${SITE1}_s_${USER}' '/tmp/${PATH2U}_${SITE2}_s_${USER}' | wc -l` 
    

    그러나 이것은 셸 리터럴을 만드는 데있어 탁월한 방법입니다. 클리너 :

    use String::ShellQuote qw(shell_quote); 
    
    my $comm_cmd = shell_quote('comm', '-3', 
        "/tmp/${PATH1U}_${SITE1}_s_${USER}", 
        "/tmp/${PATH2U}_${SITE2}_s_${USER}"); 
    
    `$comm_cmd | wc -l`