Tengo dos scripts que se ejecutan de forma independiente. primero, digamos que el guión A calcula algunos valores. Y quiero hacer eco de estos valores de otro script llamado B. Estos scripts no se llamarán entre sí. He usado la palabra clave export pero no funcionó. ¿Cómo puedo hacer esto?Exportación de variables entre el script de shell
Respuesta
Si he entendido el requisito entonces no pueden ambos guiones realizar fácilmente en el mismo shell secundario, de forma independiente, pero sin llamarse unos a otros, o sin necesidad de un archivo externo o tubo de la siguiente manera:
Digamos esta es su script1.sh
#!/bin/bash
# script1.sh: do something and finally
export x=19
Y aquí nosotros su SCRIPT2.sh
#!/bin/bash
# script2.sh: read value of $x here
echo "x="${x}
sólo los llaman en la misma sub-shell como esto
(. ./script1.sh && ./script2.sh)
SALIDA:
x=19
¿No puede leer un tercer archivo, digamos settings.sh con las variables comunes exportadas?
# common.sh
export MY_PATH=/home/foo/bar/
export VERSION=42.2a
y en ambos A y B source common.sh
para cargar esos valores.
Tenga en cuenta que la exportación puede no ser necesaria en ese caso.
No necesito un tercer archivo en realidad. – thetux4
Puede repetir los valores de los valores de los archivos, luego la otra secuencia de comandos puede leerlos. Si desea utilizarlo como un parámetro para algo, utilizar aposthrophe inversa:
echo `cat storedvalue`
tener cuidado, si las dos secuencias de comandos se ejecutan al mismo tiempo, se pueden producir problemas de concurrencia, lo que puede causar raramente aparecen, místico- buscando errores
Entonces, ¿cómo puedo pasar el valor de retorno de las secuencias de comandos A al script B? – thetux4
mkfifo /tmp/channel
process_a.sh > /tmp/channel&
process_b.sh < /tmp/channel&
wait
Por supuesto, también puede simplemente leer una sola línea cuando lo desee.
En bash hay coprocs, que también pueden ser lo que quieras. ejemplo al azar de this page
# let the output of the coprocess go to stdout
{ coproc mycoproc { awk '{print "foo" $0;fflush()}' ;} >&3 ;} 3>&1
echo bar >&${mycoproc[1]}
foobar
ksh tiene una característica similar, al parecer
comunicación entre procesos separados es más fácil de hacer con los archivos, y un tubo con nombre proporciona una interfaz práctica similar a un archivo: 'A" FIFO "es un tipo de archivo especial que permite que los procesos independientes se comuniquen. –
coproc es interesante. lo comprobaré. – thetux4
Piense en cada secuencia de comandos como una función: la función A calcula un valor y lo devuelve. No sabe quién lo llamará. La función B toma algún valor y lo repite. No importa quién produjo ese valor. Por lo tanto, la escritura A es:
#!/bin/sh
# a.sh: Calculate something and return the result
echo 19
y el guión B es:
#!/bin/sh
# b.sh: Consume the calculated result, which passed in as $1
echo The result is $1
Hacer ellas ejecutable:
chmod +x [ab].sh
Ahora, podemos pegarlas en la línea de comandos:
$ b.sh $(a.sh)
The result is 19
Semánticamente, b.sh di no llame a a.sh. Llamó a.sh y pasó su resultado a b.sh.
En realidad todo lo que necesita es source
puede omitir el prefijo export
.
Mi caso de uso era un archivo de configuración específicos medio ambiente, ejemplo:
Dentro main_script.sh
THIS_DIR=`dirname $0`
source $THIS_DIR/config_vars.sh
# other commands
Dentro config_vars.sh
- 1. exportación no funciona en mi script de shell
- 2. Exportación de variables de entorno al shell Makefile
- 3. Diferencia entre variables de entorno y shell
- 4. Variables de entorno globales en un script de shell
- 5. Variables de script de Shell: comando no encontrado
- 6. Makefile inicialización de variables y exportación
- 7. AWK: devolver valor al script de shell
- 8. script de shell: if
- 9. Prueba de script Shell
- 10. utilizando o en el script de shell script de
- 11. bash shell script dos variables en for loop
- 12. plantillas de script de shell
- 13. Exportación de variables globales desde DLL
- 14. ¿Qué significa "$$" en el script de shell?
- 15. Entrada desde el script de shell
- 16. cómo obtener un script de shell [variables de entorno] en el script de Perl sin forzar una subshell?
- 17. Generar el árbol de llamadas de script de shell
- 18. música con script de shell
- 19. shell script + números de suma
- 20. de clasificación en shell script
- 21. ¿Cómo imprimir el resultado del script de shell en CMake?
- 22. Magento: posible ejecutar perfil de exportación de ssh shell
- 23. guardar y restaurar variables de shell
- 24. ¿Cómo puedo generar variables de entorno para un shell de comandos en un script de Ruby?
- 25. codificación de script de shell de archivo
- 26. Prueba de un script de shell bash
- 27. Telnet dentro de un script de shell
- 28. Corregir bash y mayúsculas de variable de script shell
- 29. shell script de Expansión de tilde
- 30. ejecutando el comando de shell en el fondo del script
no Will '. script' hacer el truco? (Consulte http://www.linuxquestions.org/questions/linux-newbie-8/how-to-export-environment-variable-from-a-bash-script-344057/) – mlvljr
@mlvljr Debe hacer de esto una respuesta porque era lo que necesitaba Gracias. – Rebs
@ AdamGriffiths Bueno, estoy tratando de evitar la carrera de puntos de reputación aquí;) – mlvljr