Quiero llamar a un archivo de configuración para una variable, ¿cómo puedo hacer esto en bash?
Entonces el archivo de configuración definirá las variables (por ejemplo: CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Y el script usará esas variables en él
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
¿Cómo puedo hacer que bash haga algo así? ¿Tendré que usar awk / sed, etc.?
fuente
source
canalizando el contenido en lugar de proporcionar un archivo? Me gustasome command | source
no funciona ...declare -p
), sería comosomeArray[3]="abc"
, y así sucesivamente ...incluso más corto usando el punto:
fuente
source
comando completo para dejarlo claro?Use el
source
comando para importar otros scripts:fuente
Tengo el mismo problema especialmente en el caso de la seguridad y encontré la solución aquí .
Mi problema fue que quería escribir un script de implementación en bash con un archivo de configuración que contenga alguna ruta como esta.
Una solución existente consiste en utilizar el comando "FUENTE" e importar el archivo de configuración con estas variables. 'SOURCE path / to / file' Pero esta solución tiene algún problema de seguridad, porque el archivo de origen puede contener cualquier cosa que pueda contener un script Bash. Eso crea problemas de seguridad. Una persona maliciciosa puede "ejecutar" código arbitrario cuando su script obtiene su archivo de configuración.
Imagina algo como esto:
Para resolver esto, es posible que deseemos permitir solo construcciones en el formulario
NAME=VALUE
en ese archivo (sintaxis de asignación variable) y tal vez comentarios (aunque técnicamente, los comentarios no son importantes). Entonces, podemos verificar el archivo de configuración usando elegrep
comando equivalente agrep -E
.Así es como he resuelto el problema.
fuente
CMD="$(rm -fr ~/*)"
.(
y `` el finalCONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(`]*$)"
foo=bar unleash_virus
puede ser ejecutado Tenga en cuentafoo=bar\ unleash_virus
,foo="bar unleash_virus"
yfoo=bar #unleash_virus
son seguros. No es fácil desinfectar adecuadamente y no bloquear alguna sintaxis inofensiva de todos modos, especialmente cuando se piensa en cada posible cita y escape.en Bash, para obtener la salida de algunos comandos, en lugar de un archivo:
referencia
fuente
Conversión de archivo de parámetros a variables de entorno
Por lo general, analizo en lugar de buscar, para evitar complejidades de ciertos artefactos en mi archivo. También me ofrece formas de manejar especialmente las citas y otras cosas. Mi objetivo principal es mantener lo que viene después del '=' como literal, incluso las comillas dobles y los espacios.
Tenga en cuenta el pequeño truco que tuve que hacer para considerar mi texto citado como un solo parámetro con espacio para mi
cntpars
función. Se requería un nivel adicional de evaluación. Si no hiciera esto, como en la Opción 2, habría pasado 2 parámetros de la siguiente manera:"value
content"
Las comillas dobles durante la ejecución del comando hacen que se mantengan las comillas dobles del archivo de parámetros. Por lo tanto, la tercera opción también falla.
La otra opción sería, por supuesto, simplemente no proporcionar variables en comillas dobles, como en la Opción 4, y luego simplemente asegurarse de que las cita cuando sea necesario.
Sólo algo para tener en cuenta.
Búsqueda en tiempo real
Otra cosa que me gusta hacer es hacer una búsqueda en tiempo real, evitando el uso de variables de entorno:
No es el más eficiente, pero con archivos más pequeños funciona de manera muy limpia.
fuente
Si las variables se generan y no se guardan en un archivo, no puede canalizarlas
source
. La forma engañosamente simple de hacerlo es esta:fuente
El script que contiene variables se puede ejecutar importado usando bash. Considere el script-variable.sh
Considere la secuencia de comandos real donde se utilizará la variable:
fuente
src-var
es un identificador válido.Para evitar conflictos de nombres, solo importe las variables que necesita:
fuente