Funciona en mi sistema. Cuales son los sintomas ? ¿Estás seguro de que quieres usar -f, no -e?
b0fh
Respuestas:
11
Lo que está describiendo debería funcionar bien, siempre que esté utilizando 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 un archivo propiedad de root existe o no (por ejemplo [ -f /root/.ssh/known_hosts ], probablemente fallará, porque el directorio /root/.ssh no lo es (o al menos no debería) t ) ser legible por un usuario normal. [ -f /etc/crontab ]debe tener éxito).
Existe un posible problema: si el sudocomando falla (contraseña incorrecta, no permitida en / etc / sudoers, etc.), dará el mismo resultado que si el archivo no existiera.
Gordon Davisson
1
@Gordon - cierto: mi respuesta se basa en la sudoparte que funciona :)
voretaq7
13
if sudo test -f "/path/to/file";then
echo "FILE EXISTS"else
echo "FILE DOESN'T EXIST"fi
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
La respuesta de Luca Borrione funcionó perfectamente para mí. Necesitaba probar la existencia de archivos que se encontraban en el interior de directorios legibles solo por root.
wallheater
1
Además de las otras respuestas, se puede distinguir entre la prueba o la falla de autenticación de sudo ejecutando primero sudo true. La mayoría de las implementaciones de sudo que conozco no requerirán una nueva autenticación en un corto período de tiempo.
Por ejemplo:
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
Respuestas:
Lo que está describiendo debería funcionar bien, siempre que esté utilizando 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 un archivo propiedad de root existe o no (por ejemplo[ -f /root/.ssh/known_hosts ]
, probablemente fallará, porque el directorio /root/.ssh no lo es (o al menos no debería) t ) ser legible por un usuario normal.[ -f /etc/crontab ]
debe tener éxito).fuente
sudo
comando falla (contraseña incorrecta, no permitida en / etc / sudoers, etc.), dará el mismo resultado que si el archivo no existiera.sudo
parte que funciona :)página de 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
fuente
Además de las otras respuestas, se puede distinguir entre la prueba o la falla de autenticación de sudo ejecutando primero
sudo true
. La mayoría de las implementaciones de sudo que conozco no requerirán una nueva autenticación en un corto período de tiempo.Por ejemplo:
fuente