Soluzione 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
pagina man di prova
Per completare le cose, sul lato opposto, se vuoi controllare da root se un file o una directory è leggibile per un certo utente puoi usare
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Soluzione 2:
Quello che stai descrivendo dovrebbe funzionare bene, purché tu stia utilizzando percorsi assoluti e -f
("Il file esiste ed è un file normale") è davvero il test che vuoi eseguire.
Vedo un /
finale in quello che hai postato nella tua domanda:stai testando una directory? Dovrebbe essere -d
, o semplicemente -e
("Qualcosa esiste con quel nome - indipendentemente dal tipo")
Nota anche che a meno che qualcosa lungo il percorso non sia leggibile test
([
) dovrebbe essere in grado di dirti se esiste o meno un file di proprietà di root (ad es. [ -f /root/.ssh/known_hosts ]
probabilmente fallirà, perché la directory /root/.ssh non lo è (o almeno non dovrebbe esserlo ) leggibile da un utente normale. [ -f /etc/crontab ]
dovrebbe riuscire).
Soluzione 3:
In aggiunta alle altre risposte, la distinzione tra il test o il fallimento dell'autenticazione sudo potrebbe essere eseguita eseguendo prima sudo true
. La maggior parte delle implementazioni di sudo che conosco non richiedono la riautenticazione entro un breve periodo.
Ad esempio:
if sudo true; then
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
else
echo "SUDO AUTHENTICATION FAILED"
fi