Solución 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
página del manual de prueba
Para completar las cosas, en el lado opuesto, si desea verificar desde la raíz si un archivo o directorio es legible para un determinado usuario, puede usar
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Solución 2:
Lo que estás describiendo debería funcionar bien, siempre que estés usando rutas absolutas y -f
("El archivo existe y es un archivo normal") es realmente la prueba que desea realizar.
Veo un final /
en lo que publicaste en tu pregunta:¿estás probando un directorio? Eso debería ser -d
, o simplemente -e
("Algo existe con ese nombre, independientemente del tipo")
También tenga en cuenta que a menos que algo en el camino no sea legible test
([
) debería poder decirle si existe o no un archivo propiedad de root (por ejemplo, [ -f /root/.ssh/known_hosts ]
probablemente fallará, porque el directorio /root/.ssh no lo es (o al menos no debería serlo ) legible por un usuario normal. [ -f /etc/crontab ]
debería tener éxito).
Solución 3:
Agregando a las otras respuestas, distinguir entre la prueba o la falla de autenticación de sudo podría hacerse ejecutando primero sudo true
. La mayoría de las implementaciones de Sudo que conozco no requerirán una nueva autenticación en un período breve.
Por ejemplo:
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