2012-12-24 3 views
3

쉘 (ksh) 스크립트가 있습니다. 특정 디렉토리가 /tmp에 있는지 여부를 확인하고 현재 디렉토리가 있으면 삭제해야합니다. 내 스크립트입니다 :쉘 스크립트를 사용하는 경우에만 디렉토리를 삭제하십시오.

테스트

#!/usr/bin/ksh 
# what should I write here? 
if [[ -f /tmp/dir.lock ]]; then 
    echo "Removing Lock" 
    rm -rf /tmp/dir.lock 
fi 

내가 어떻게 진행할 수 있습니까? 원하는 결과를 얻지 못했습니다. 스크립트를 실행할 때 디렉토리가 제거되지 않고 내 화면에 Removing Lock 출력이 표시되지 않습니다.

수동으로 확인했는데 잠금 파일이 해당 위치에 있습니다. 잠금 파일은 TCL 프로그램에 의해 set MUTEX_LOCK "/tmp/dir.lock"으로 생성됩니다.

+0

파일이 디렉토리에 있습니까? – Rubens

+0

@Rubens : 업데이트 된 질문을 확인하십시오 –

+0

당신이하고있는 일에 대해 큰 혼란을 겪고있는 것처럼 보입니다 : 당신은 Tcl 스크립트 (확장자가'.tcl'로 끝남)가 있다고 말하고 동시에 그것은 shebang을 사용한다. (이것은 완전한 경로명을 지정하지 않았기 때문에 잘못된 것이지만 첫 번째 슬래시를 잊었을 때 상대적이다.) Korn 쉘을 사용하여 스크립트를 실행하도록 커널에 명령한다. 너무 혼란 스럽기 때문에 실제로 의도했던 것을 추론하는 것도 불가능합니다. – kostix

답변

16

을 또한 -f[ ] 인 반면 [[ ]]는, POSIX 아니라고 -d 참고 대. 두 번 이상 사용하는 문자열이나 경로는 입력 오류를 피하기 위해 변수에 있어야합니다. 특히 극단적 인 편견을 가지고 삭제하는 rm -rf을 사용할 때 그렇습니다. 가장 이식 가능한 솔루션은 파일입니까?

DIR=/tmp/dir.lock 
if [ -d "$DIR" ]; then 
    printf '%s\n' "Removing Lock ($DIR)" 
    rm -rf "$DIR" 
fi 
+0

그런 식으로'printf'를 사용하는 것이 이상하다. 어떤 근거? 왜 그냥'echo "하지 마라. Lock ($ DIR)"'을 제거 할까? – GreyCat

+0

'printf'는 새로운 echo입니다. 이것은 90 년대입니다. 시스템 V는 BSD와 비교되지 않으며, -n 및 -c 두통, 전체 형식 지정이 없습니다. 내가 더 말할 필요가 있니? :-) – Jens

4

디렉토리 검사의 경우 -d을 사용해야합니다

if [[ -d /tmp/dir.lock ]]; then 
    echo "Removing Lock" 
    rm -rf /tmp/dir.lock 
fi 
관련 문제