¿Cuál es el significado de $ {GZIP_BINDIR - '/ bin'} en bash?

13

¿Alguien puede explicar qué significa este comando?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Rashmi Narahari
fuente

Respuestas:

19

${GZIP_BINDIR-'/bin'}es un bashpatrón de expansión de parámetros. De man bash:

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

Inmediatamente antes de esta parte, la página de manual tiene (gracias a @jwodder por notificar):

Omitting the colon results in a test only for a parameter that is unset.

Como dice la página de manual, establecerá el valor predeterminado de la variable GZIP_BINDIR. Si GZIP_BINDIRtiene un valor previamente establecido (que no sea nulo, ya que no lo está usando :), se usará ese valor; de lo contrario /bin, se usará como el valor de la variable GZIP_BINDIR.

Por otro lado, si también desea probar valores nulos, use este patrón (incluir :):

${GZIP_BINDIR:-'/bin'}

Después de eso $PATH, se expandirá a los valores que tenía antes. Entonces, si PATHanteriormente tenía:

/usr/sbin:/usr/bin

Ahora tu PATHserá (considerando GZIP_BINDIRque no está configurado):

/bin:/usr/sbin:/usr/bin

export PATHpondrá esto a PATHdisposición de todos los procesos secundarios.

heemayl
fuente
" Creo que ha perdido una :de${GZIP_BINDIR-'/bin'} " No necesariamente. ${parameter-word}es válido también, aunque no parece estar en la página del manual.
nyuszika7h
@ nyuszika7h Sí ... no lo sabía antes ... extraño por qué no está incluido en la página de manual ...
heemayl
En la página de manual de bash en mi computadora, el párrafo justo arriba de la sección :-dice: "Cuando no se realiza la expansión de subcadenas, usando los formularios documentados a continuación (por ejemplo, :-), bash prueba para un parámetro que no está establecido o es nulo. Omitir los dos puntos da como resultado una prueba solo para un parámetro que no está configurado. "
jwodder
Como nota al margen, puede combinar la configuración de PATHy exporten un solo comando de la siguiente manera:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Paddy Landau
8

¿Realmente no hay dos puntos antes del guión dentro de la expansión del parámetro ${GZIP_BINDIR-'/bin'}?

Este tipo de construcción casi siempre se escribe con dos puntos, ya ${GZIP_BINDIR:-'/bin'}que significa "si $ GZIP_BINDIR es NULL o no está configurado, configúrelo en '/ bin'"

Sin embargo, la sintaxis que proporcionó es válida, pero rara. ${GZIP_BINDIR-'/bin'}(sin dos puntos) significa "si $ GZIP_BINDIR no está configurado, configúrelo en '/ bin'". Si está configurado (se ha declarado) pero no se le ha asignado nada (por ejemplo, es NULL), no se insertará nada.

Puede haber un error aquí, aunque como el de colon tras el constructo variable (...} :$ PATH ...) será aún si se inserta $ GZIP_BINDIR es fijo pero NULL. Como esto agregaría dos puntos al comienzo de $ PATH, hará que primero se busque en el directorio actual.

La mayoría considera que es un problema de seguridad, ya que hace que sea más fácil ejecutar un programa malicioso con el mismo nombre que los comandos estándar con solo ponerlo en el directorio actual.

Para dejar $ PATH sin cambios si $ GZIP_BINDIR está configurado pero NULL (vacío), la sintaxis correcta sería ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

Para dejar $ PATH sin cambios si $ GZIP_BINDIR no está establecido o está establecido pero NULL, la sintaxis correcta sería ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH

DocSalvager
fuente
2

Este comando actualiza la variable PATH.

El PATHes una variable de entorno que especifica un conjunto de directorios donde se encuentran los programas ejecutables.

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

Esto agrega el valor de otra variable GZIP_BINDIRsi sale a la RUTA anterior, de lo contrario use / bin y agréguelo a la RUTA

export PATH

export se usa para establecer la RUTA disponible para todos los procesos secundarios y subcapas Lea esto para obtener más información sobre

Debe tener en cuenta que esto no es estático y lo perderá una vez que salga de su shell.

Para que esta edición de RUTA sea permanente, debe agregar estas líneas a su .bashrc

gedit .bashrc

y agrega la línea

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

luego ejecuta el comando

source .bashrc
Maythux
fuente
GZIP_BINDIR es la variable
Maythux
¿Qué no está bien? No, no lo hice? el mío también ha
votado a favor
¿Por qué votar abajo?
Maythux