Eu não sei porque funciona, mas eu mudo '%s'
para '%a'
e isso resolveu meu problema:)
Estou tentando verificar e alterar as permissões de uma pasta no script de shell. No entanto, ele quer alterar as permissões, mesmo que elas tenham mudado.
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
Erro:
Wait please, we're changing the permissions
sudo: unable to resolve host john
[sudo] password for john:
sudo: unable to resolve host john
Eu digito a senha correta. Eu nunca recebo Approved!
, por quê?
Eu não sei porque funciona, mas eu mudo '%s'
para '%a'
e isso resolveu meu problema:)
Você precisa entender o que está fazendo.
man stat
produz, entre outras coisas, as sequências de formato:
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
Como você pode ver, %s
é tamanho. Como /usr/local/src
é um diretório, o tamanho é 4096
. O que você está procurando são os direitos de acesso, então %a
ou %A
.
As saídas são correspondentemente,
$ stat -c '%a' /usr/local/src/
2775
ou apenas 3 dígitos se o primeiro octeto for 0
; e
$ stat -c '%A' /usr/local/src/
drwxrwsr-x
No seu script, esta linha:
if [ "$(stat -c '%s' /usr/local/src)" == "755" ];
compara a saída da substituição "$(stat -c '%s' /usr/local/src)"
com a string "755"
. Uma maneira simples de depurar isso é executar o lado esquerdo sozinho e examinar o resultado.
$ stat -c '%s' /usr/local/src/
4096
Como você pode ver, isso não é um resultado, que pode representar direitos de acesso, embora seja similar em formato (4 dígitos). Mas nenhuma permissão pode ser definida como 9
, pois são octal. E octal significa que há apenas 8 dígitos representando, ou seja, 0-7. Aqui está o momento de verificar a página man
do comando stat
, que apresentei no começo.
Agora, deve ser fácil descobrir como corrigir seu script.
Tags permissions shell-script