2016-12-02 1 views
1

나는이 여러 시도했다 말할 수있는 방법이 있는지 궁금 'chmod를 다음 파일의 권한을 변경하지 않는 경우 ...'은 알아 내려고

if ! chmod ${1} ${2} #if chmod did not excecute correctly 
then 
echo "${0}:ERROR: ${2} has not been changed." 1>&2 
exit 6 #exiting due to failure. status 6 
fi 

임 다른 방법하지만 난 단지 내가 변경 -rwxr-XR-X로 시작하는 경우

즉 그것은 다른

아무것도 -rwxrwxrwx 없습니다 ... 현재 설정에 추가보다는 변경할 수있는 것은

을 작동하는 것 같다
+2

@EricLeschinski는 참조로 ABS를 제안하지 마십시오 - 그것은 오래된 제안과 나쁜 사례 예제의 전체 배쉬의 W3 스쿨,입니다. bash-hackers wiki는 훨씬 더 평판 좋은 소스입니다. 종료 상태 페이지는 [here] (http://wiki.bash-hackers.org/dict/terms/exit_status)입니다. 마찬가지로 [BashGuide의 테스트 및 조건부] 섹션 (http://mywiki.wooledge.org/BashGuide/TestsAndConditionals)은 종료 상태를 자세히 설명합니다. –

+0

'$ {1}'에 무엇이 들어 있습니까? 여기의 문제는 당신이'chmod'를 먹고있는 것일 수 있습니다. 아마 그것은 당신이 기대하는대로 행동하지 않는 유효한 명령 일 것입니다. :) – ghoti

+0

"올바르게 실행하지 못했습니다"또는 "실패했습니다"는 의미는 무엇입니까? 권한이 이미 원하는 경우 권한이 실패 했습니까? 운영 체제의 시스템 호출이 성공하면 (요청 된 변경을 성공적으로 수행했다는 것을 파일 시스템이보고했음을 의미 함) 기본 파일 시스템이 원하는 권한을 나타낼 수 없으며 (따라서 읽기를 다시 수행하는 방식으로 변경 사항을 구현합니다 당신이 지정한 것과는 다른), 실패로 간주합니까? 시나리오가 무엇인지에 대해 매우 구체적으로 설명하십시오. 일반적으로'chmod'는 이미 실패를보고합니다. –

답변

1

귀하의 com 명령은 정확합니다. 하지만 그것은 chmod가 작동하지 않을 때만을 감지합니다 (예 : 파일을 소유하지 않은 경우, FS가 읽기 전용 일 때 등).

당신은 또한 chmod를 아무것도 변경되지 않았 음을 감지 할 경우,이 시도 :

if ! res=$(chmod -c -- "${1}" "${2}") || [ -z "$res" ] 
then 
    echo "${0}:ERROR: ${2} has not been changed." 1>&2 
    exit 6 #exiting due to failure. status 6 
fi 

-c 플래그는 GNU chmod를 다릅니다. 여기에 대한 설명은 다음과 같습니다

-c, --changes 
    like verbose but report only when a change is made 

-v, --verbose 
    output a diagnostic for every file processed 
+0

'-c'는 [POSIX'chmod'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html)에 지정되어 있지 않으며 BSD 버전에서도 사용할 수 없습니다. GNU가 맞습니까? –

+0

@Charles Duffy 아마. verbose와 같이 -c/--changes :에 대한 설명이 있지만 변경이있을 때만보고합니다. – xhienne

+1

사용중인 운영 체제가 확실치 않지만 OS X 또는 FreeBSD의 chmod에'-c' 옵션이 표시되지 않습니다. 특정 플랫폼이 아닌 질문에 대한 벤더 또는 플랫폼 별 답변을 제공하려는 경우 답변에 포함 된 제한 사항을 포함하십시오. – ghoti

관련 문제