¿Qué significa -f en una instrucción if en un script bash?

Intento comprender este fragmento de código:

if [ -f /etc/bashrc ]; then . /etc/bashrc fi 

No estoy seguro qué significa -f exactamente.

Respuesta

La página de manual relevante para verificar esto es la del propio shell, bash, porque -f es una funcionalidad que proporciona el shell, es «un bash incorporado.

En mi sistema (CentOS 7), la excelente página de manual lo cubre. Es posible que grep no dé los mismos resultados en otras distribuciones. Sin embargo, si ejecuta man bash y luego busca «-f», debería dar los resultados que necesita.

$ man bash | grep -A1 "\-f file$" -f file True if file exists and is a regular file. $ 

Respuesta

En resumen, el fragmento de código obtendrá el archivo /etc/bashrc si existe, y el la existencia se verifica mediante el comando [ para el cual -f es un operador / parámetro.

en la secuencia de comandos de shell evalúa el estado de salida de los comandos – 0 en caso de éxito. Entonces, es correcto hacer algo como esto:

if ping -c 4 google.com; then echo "We have a connection!" fi 

El comando, en su caso, es [ que también se conoce como comando test. Por lo tanto, «sería perfectamente válido hacerlo

if test -f /etc/bashrc; then . /etc/bashrc fi 

El -f flag verifica dos cosas: la ruta proporcionada existe y es un archivo normal. Si /etc/bashrc de hecho es un directorio o falta, la prueba debería devolver un estado de salida distinto de cero para señalar una falla

Este comando originalmente era un comando separado, es decir, no parte de los comandos integrados del shell. Hoy en día, la mayoría de los shells similares a Bourne lo tienen integrado, y eso es lo que utilizará el shell.

En una nota al margen, el /etc/bashrc parece un archivo adicional innecesario que está usando su administrador o autor original del fragmento de código. Existe /etc/bash.bashrc, que está diseñado como un archivo rc de todo el sistema para bash, por lo que uno esperaría que se usara.

Consulte también:

)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *