2009-10-09 4 views

답변

2

와우, 나는 몇 년에 csh 스크립트를 작성하지 않았습니다. 그러나 빌 조이 (Bill Joy)이 루프 구조는 단어가 CSH 내장 된 개념으로 잘 작동합니다 ... 나는 그것이 어떤 향수의 노력이 가치가 가정, 그것을

set t=(*) 
foreach i ($t) 
    echo $i >> /tmp/z 
end 

하거나 foreach i (*)

을 자신을 쓰기 않았다 목록. 이것은 일종의 bash에 있지만 바닐라 posix 쉘에는 존재하지 않습니다.

set q=(how now brown cow) 
echo $q[2] 

데이터 구조를 통해 반복 (Iteration) 깔끔하게 foreach 루프.

+1

* 업데이트 : * 좋아, 좋아, 글쎄, 난 csh에서 하나의 라이너 루프를 수행하는 방법을 모르겠다. csh 문법은';'과 newline을 다르게 처리합니다. 친절한 편도 아니에요. – DigitalRoss

10

csh 맨 페이지 상태 :

은 if 문의 foreach는, 스위치 및 진술하는 동안뿐만 아니라 경우 - 당시 다른 형태의 주요 키워드가 하나의 간단한 명령에 표시해야 다음과 같이 입력 라인에 입력하십시오.

모두의 foreach과 끝은 별도의 행에 나타나야합니다.

다른 단어와 입력 라인의 시작 부분에 나타나야합니다 ENDIF; if는 입력 라인에 단독으로 나타나거나 else 뒤에 나타나야합니다.

그동안과 끝 혼자 자신의 입력 라인에 표시되어야합니다.

+2

Csh 프로그래밍의 유해한 것으로 간주되는 "흐름 제어"참조 : http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ –

1

난 당신이 뭔가를 할 수 있도록, 내가 CSH 옵션에도 불구하고, 어떻게 든 해결했다고 말할 것입니다 :

printf "while (1) \n ps -aux|grep httpd \n echo 'just a new row' \n sleep 2 \n end" | csh -f 
0

내가 쉽게 루프를 통해 CSH 쉘을 위해 노력하고 동일한 실행 명령 끝났어.

으로는이 답변에 의해 지적 :

https://stackoverflow.com/a/1548355/1897481 날 하나 oneliner 작업을 포기 제작.

마지막 루프 * 인수 명령을 실행할 다음 별명 데 정착 :

# while_cmd_w_sleep <SLEEP-TIME> <CMD + ARGS> 
    alias while_cmd_w_sleep '(echo '\''while (1)\n\!:2*\necho =================\necho Sleeping for \!:1.\nsleep \!:1\necho =================\nend'\'') | tcsh' 

    # for_n_cmd <LOOP_COUNT> <CMD + ARGS> 
    alias for_n_cmd   '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:2*\nend'\'') | tcsh' 

    # for_n_cmd_w_sleep <LOOP_COUNT> <SLEEP-TIME> <CMD + ARGS> 
    alias for_n_cmd_w_sleep '(echo '\''foreach x (`seq \!:1`)\necho =================\necho Iteration \[$x]\necho =================\n\!:3*\necho =================\necho Sleeping for \!:2.\nsleep \!:2\nend'\'') | tcsh' 

샘플 출력 :

$> for_n_cmd 3 echo hi 
    ================= 
    Iteration [1] 
    ================= 
    hi 
    ================= 
    Iteration [2] 
    ================= 
    hi 
    ================= 
    Iteration [3] 
    ================= 
    hi 

while 루프 :

$> while_cmd_w_sleep 2s echo hello there 
    hello there 
    ================= 
    Sleeping for 2s. 
    ================= 
    hello there 
    ================= 
    Sleeping for 2s. 
    ================= 
    hello there 
    ================= 
    Sleeping for 2s. 
    ^C 

* 루프에서 여러 명령을 실행하는 예 :

$> for_n_cmd 3 'echo hi\\nsleep 2s\\necho done waiting' 
    ================= 
    Iteration [1] 
    ================= 
    hi 
    done waiting 
    ================= 
    Iteration [2] 
    ================= 
    hi 
    done waiting 
    ================= 
    Iteration [3] 
    ================= 
    hi 
    done waiting 

이 예제에서는 세 개의 명령 echo hi, sleep 2secho done waiting이 루프에서 실행 중입니다.

관련 문제