2013-05-29 1 views
0

이것은 bash에서 잘 작동하지만 tcsh에서 작동하도록해야합니다. 아래는 내가 코드를 사용한다 :if 문이 tcsh에서 작동하지 않지만 bash에서 잘 작동합니다.

if [ -e ~/test/file ]; then echo 'yes'; else echo | mail -s 'not done' [email protected] ; fi 

이 기본 코드 나에게 if: Expression Syntax를 말하는 오류를 제공합니다.

오류의 의미를 모르겠지만 if 문이 작동하지 않는 이유를 모르겠습니다. 대괄호 앞뒤에 공백이 있습니다. 나는 if (test -f ~/test/file)을 시도하고 동일한 오류가 발생했습니다.

기본적으로 나는 bash를 사용하므로이 오류는 통찰력을주지 못합니다. 비슷한 사례가 있지만 파일 존재 여부를 확인하는 것과 관련이 없습니다.

+0

참조 : http://www.csem.duke.edu/Cluster/csh_basics.htm#if –

+0

나는 한 줄로 모든 것을 지킬 수있는 방법이 없다. 나는 이것을 한 줄로하고 싶다. – yatici

+1

@yatici : tcsh에서 한 줄짜리'if '를하는 가장 좋은 방법은 [...] 인 경우'sh -c'입니다. 그때 ...; else ...; fi "를 사용하거나, Bash 특정 기능이 필요한 경우'sh -c'를'bash -c'로 대체하십시오. –

답변

1

tcsh 맨 페이지의 '파일 조회 연산자'섹션을 참조하십시오.

당신이 설명하는 무엇의 tcsh sytnax은 tcsh에서 한 줄의 코드 조각을 실행 잘 아니라고

if (-e ~/test/file) then 
    echo 'yes' 
else 
    echo | mail -s 'not done' [email protected] 
endif 

주입니다.

+0

그래서 한 줄로 할 수 없습니까? – yatici

+0

나는 한 번만 할 수있는 뾰족한 방법을 보았다. 한 줄이면 'tcsh'를 찾는다. tcsh 문제에 대한 나의 평소 해결책은 bash를 실행하는 것입니다.) – Nigel

1

당신은 명령의 순서로 테스트 명령을 사용하여 한 줄에 실행할 수 있습니다

test -e ~/test/file && echo 'yes' || mail -s 'not done' [email protected] 

또는 당신이 긍정적 인 경우에 관심이없는 경우, 당신은 짧은 "만약"형식을 사용할 수 있습니다

if (! -e ~/test/file) mail -s 'not done' [email protected] 
+0

예, 이것이 제 답변에서 언급 한 방법입니다. – Nigel

관련 문제