2016-12-02 1 views
1

イムを失敗したかどうかを確認しようとすると「chmodコマンドは、その後、ファイルのパーミッションを変更しない場合は...」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を提案しないでください - それは時代遅れの提案と悪い-実践例のフルは、bashのW3Schoolsのです。 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

関連する問題