Řešení 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
testovací manuálovou stránku
Abychom to dokončili, na druhé straně, pokud chcete z rootu zkontrolovat, zda je soubor nebo adresář čitelný pro určitého uživatele, můžete použít
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Řešení 2:
To, co popisujete, by mělo fungovat dobře – pokud používáte absolutní cesty a -f
(„Soubor existuje a je běžným souborem“) je skutečně test, který chcete provést.
Vidím na konci /
v tom, co jste zveřejnili ve své otázce - Testujete adresář? Mělo by to být -d
, nebo jednoduše -e
("Něco s tímto jménem existuje - bez ohledu na typ")
Všimněte si také, že pokud něco na cestě není čitelné test
([
) by vám měl sdělit, zda soubor vlastněný uživatelem root existuje nebo ne (např. [ -f /root/.ssh/known_hosts ]
pravděpodobně selže, protože adresář /root/.ssh není (nebo alespoň neměl by ) čitelné pro běžného uživatele. [ -f /etc/crontab ]
by měl uspět).
Řešení 3:
Přidání dalších odpovědí, rozlišení mezi neúspěšným testem nebo sudo autentizací lze provést nejprve spuštěním sudo true
. Většina implementací sudo, o kterých vím, nebude vyžadovat opětovné ověření během krátké doby.
Například:
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