Funciona no meu sistema. Quais são os sintomas? Tem certeza de que deseja usar -f, não -e?
b0fh
Respostas:
11
O que você está descrevendo deve funcionar bem - desde que você esteja usando caminhos absolutos e -f("O arquivo existe e é um arquivo comum") é realmente o teste que você deseja executar.
Eu vejo um rastro /no que você postou na sua pergunta - Você está testando para um diretório? Deve ser -d, ou simplesmente -e("Existe algo com esse nome - independentemente do tipo")
Observe também que, a menos que algo ao longo do caminho não seja legível test( [), deve ser capaz de informar se um arquivo pertencente ao root existe ou não (por exemplo [ -f /root/.ssh/known_hosts ], provavelmente falhará, porque o diretório /root/.ssh não é (ou pelo menos deveria 't ser ) legível por um usuário normal. [ -f /etc/crontab ]deve suceder).
Existe um possível problema: se o sudocomando falhar (senha incorreta, não permitida em / etc / sudoers, etc), dará o mesmo resultado como se o arquivo não existisse.
Gordon Davisson
1
@Gordon - true: A minha resposta é baseada na sudoparte de trabalho :)
voretaq7
13
if sudo test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fi
Para concluir, no lado oposto, se você deseja verificar a partir da raiz se um arquivo ou diretório é legível para um determinado usuário, você pode usar
if sudo -u username test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fi
A resposta de Luca Borrione funcionou perfeitamente para mim. Eu precisava testar a existência de arquivos que estavam dentro de diretórios legíveis apenas pela raiz.
Wallheater
1
Adicionando às outras respostas, a distinção entre a falha de autenticação de teste ou sudo pode ser feita pela primeira execução sudo true. A maioria das implementações de sudo que conheço não exigirá nova autenticação dentro de um curto período.
Por exemplo:
if sudo true;thenif sudo test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fielse
echo "SUDO AUTHENTICATION FAILED"fi
Respostas:
O que você está descrevendo deve funcionar bem - desde que você esteja usando caminhos absolutos e
-f
("O arquivo existe e é um arquivo comum") é realmente o teste que você deseja executar.Eu vejo um rastro
/
no que você postou na sua pergunta - Você está testando para um diretório? Deve ser-d
, ou simplesmente-e
("Existe algo com esse nome - independentemente do tipo")Observe também que, a menos que algo ao longo do caminho não seja legível
test
([
), deve ser capaz de informar se um arquivo pertencente ao root existe ou não (por exemplo[ -f /root/.ssh/known_hosts ]
, provavelmente falhará, porque o diretório /root/.ssh não é (ou pelo menos deveria 't ser ) legível por um usuário normal.[ -f /etc/crontab ]
deve suceder).fonte
sudo
comando falhar (senha incorreta, não permitida em / etc / sudoers, etc), dará o mesmo resultado como se o arquivo não existisse.sudo
parte de trabalho :)página de manual de teste
Para concluir, no lado oposto, se você deseja verificar a partir da raiz se um arquivo ou diretório é legível para um determinado usuário, você pode usar
fonte
Adicionando às outras respostas, a distinção entre a falha de autenticação de teste ou sudo pode ser feita pela primeira execução
sudo true
. A maioria das implementações de sudo que conheço não exigirá nova autenticação dentro de um curto período.Por exemplo:
fonte