Estoy tratando de verificar si existe un enlace simbólico en bash. Esto es lo que he intentado.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
Sin embargo, eso no funciona. Si '!' se deja afuera, nunca se dispara. Y si '!' está ahí, se dispara cada vez.
Respuestas:
-L
devuelve verdadero si el "archivo" existe y es un enlace simbólico (el archivo vinculado puede o no existir). Desea-f
(devuelve verdadero si el archivo existe y es un archivo normal) o tal vez solo-e
(devuelve verdadero si el archivo existe independientemente del tipo).De acuerdo con la página de manual de GNU ,
-h
es idéntico a-L
, pero de acuerdo con la página de manual de BSD , no debe usarse:fuente
!
esif ! [ -L $mda ]; then .... fi
decir, poner el signo de exclamación fuera de los corchetes.if [ ! -L "$mda" ]; then ... fi
(nota:if [ ! ... ]
yif ! [ ... ]
son idénticos :)-L
y-h
son lo mismo .man test
También confirma esto.-L es la prueba de archivo existente y también es un enlace simbólico
Si no desea probar que el archivo sea un enlace simbólico, solo pruebe para ver si existe independientemente del tipo (archivo, directorio, socket, etc.) y luego use -e
Entonces, si el archivo es realmente un archivo y no solo un enlace simbólico, puede hacer todas estas pruebas y obtener un estado de salida cuyo valor indica la condición de error.
fuente
-e "${file}"
falla si el enlace simbólico existe pero su objetivo no existe.Puede verificar la existencia de un enlace simbólico y que no está roto con:
Entonces, la solución completa es:
fuente
Quizás esto es lo que estás buscando. Para verificar si existe un archivo y no es un enlace.
Prueba este comando:
fuente
¿Qué tal el uso
readlink
?fuente
¿Es el archivo realmente un enlace simbólico? Si no, la prueba habitual de existencia es
-r
o-e
.Ver
man test
.fuente
Si está probando la existencia de un archivo, quiere -e no -L. -L prueba para un enlace simbólico.
fuente
primero puedes hacer con este estilo:
si quieres hacerlo en un estilo más avanzado puedes escribirlo como a continuación:
El resultado de arriba es como:
fuente