
シェルスクリプトでフォルダの権限を確認して変更しようとしています。ただし、権限がすでに変更されていても、権限を変更しようとしています。
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
then
echo "Approved!"
else
echo "Wait please, we're changing the permissions"
sudo chmod -R 755 /usr/local/src
fi
間違い:
Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john:
sudo: unable to resolve host john
正しいパスワードを入力しました。私は一度も受けたことがありませんがApproved!
、なぜですか?
答え1
なぜ効果があったのかわかりませんが、この方法'%s'
で変更したところ、'%a'
問題が解決しました。 :)
答え2
あなたは何をしているのかを理解する必要があります。
man stat
とりわけ、フォーマット順序が生成されます。
The valid format sequences for files (without --file-system):
%a access rights in octal
%A access rights in human readable form
(...)
%s total size, in bytes
ご覧のとおり%s
サイズです。/usr/local/src
ディレクトリとしてのサイズはです4096
。あなたが探しているのはアクセス権%a
なので%A
。
それによる出力は次のようになります。
$ stat -c '%a' /usr/local/src/
2775
または、最初のオクテットが0
3桁の数字です。
$ stat -c '%A' /usr/local/src/
drwxrwsr-x
スクリプトでは、次の行は次のようになります。
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
置き換えられた出力を文字列と"$(stat -c '%s' /usr/local/src)"
比較します"755"
。この問題をデバッグする簡単な方法は、左側のみを実行して結果を確認することです。
$ stat -c '%s' /usr/local/src/
4096
ご覧のとおり、同様の形式(4桁)ですが、アクセス権を示す結果ではありません。ただし、権限は9
8進数なので設定できません。 8進表現には8つの代表数字、つまり0〜7のみがあります。それでは、冒頭で紹介したman
コマンドページを確認してみましょう。stat
これで、スクリプトを修正する方法を簡単に把握できます。