2017-02-22 3 views
0

를 사용할 때이처럼 보이는 코드의 비트를 쓰고 싶습니다 STDERR을 억제 이 오류 메시지를 표시하지 않을 수 있지만 여전히 파이프 STDOUT to wc? 나는 이것에 대한 기존의 질문을 거쳤지 만 대부분의 대답은 csh에서 작동하지 않거나 과 STDERR|&으로 결합하려고 시도하고 싶지 않습니다.CSH는 역 따옴표

답변

0

가장 깨끗한 방법은 ls 자체를 음소거하는 것이지만 가능하지 않습니다. 당신의 루프 myscript.cs라는 파일에있는 경우
을 당신은 당신이 원하는 목적지에 표준 오류 리디렉션 쉘 명령> &를 추가, 일부 인수 myscript.cs -arg1 blabla -arg2 bla 사용하여 파일을 호출 :
당신은 의미, 전체 스크립트를 억제 할 수 있습니다. 예 :
myscript.cs -arg1 blabla -arg2 bla >& /dev/null

직접 답을 얻지는 못했지만 문제를 해결해야합니다. LS -1 $ {JOB_PREFIX} _ $ {`경우

: 편집

는 의견은 스크립트, 두 개의 라인으로 라인을 분할 할 수 있습니다 다른 스크립트로 리디렉션해야한다고 덧붙였다 때문에 job_counter} _ *. 아웃> &는/dev/null` 다음
동안 여기 < 당신의 동안>

ENDIF

,
+0

불행하게도이 문제가 해결되지 않습니다. 나는 사실상'ls'을 억제 할 해결책이 정말로 필요합니다. –

+0

http://stackoverflow.com/questions/42261228/csh-set-no-match-error-wildcard/42384620#42384620 나는 비슷한 질문에 대답했다. – user2141046

0

csh와 tcsh는 stderr를 자체적으로 리디렉션 할 수 없으므로 스크립팅에 사용해서는 안되는 여러 가지 이유 중 하나입니다. 다른 쉘을 산란 괜찮 경우

, 당신은 환경 변수에 JOB_COUNTER을 변경하고 수행 할 수 있습니다

while (`sh -c '2>/dev/null ls -1 ${JOB_PREFIX}_${JOB_COUNTER}_*.out | wc -l'` > 0) 
    echo "Do something here." 
end 

을 당신이 표현 대신 while 루프 조건으로 테스트를 사용하려면 , 당신은 창조적이되어야합니다. 귀하의 경우에는

#!/bin/tcsh -f 
set i = 4 
while (1) 
    if ($i <= 0) break 
    echo hi 
    @ i = ($i - 1) 
end 

,이 같은 것을 볼 수 있습니다 나는 우리가 stderr로 인쇄 된 결과 대신 종료 상태를 사용할 수 있도록 grep -q .wc -l을 변경했습니다. 스크립트의 출력이 다른 스크립트에 파이프 또한 다음 같은 문제가있는 것 모두 로그 파일, 전송로

#!/bin/tcsh -f 

set dir_exit_status = 0 
while ($dir_exit_status = 0) 
    (ls -1 ${JOB_PREFIX}_${job_counter}_*.out | grep -q '.') >& /dev/null 
    set dir_exit_status = $status 
end