primer mensaje aquí, pero ha sido un acertijo durante siglos. he buscado en Google por edades, pero no puedo encontrar lo que quiero (muchos temas de temas abigarrados que no solicitan lo que el tema sugiere que haga ...). no es nuevo para awk o scripting, solo un poco oxidado :)awk: configuración de las variables de entorno directamente desde dentro de una secuencia de comandos awk
Estoy tratando de escribir un script awk que establecerá valores de env del intérprete mientras se ejecuta - para otro script bash para recoger y utilizar más adelante. simplemente no puedo usar stdout de awk para informar este valor que quiero configurar (es decir, "exportar lo que sea = awk cmd here
"), ya que eso está dirigido a un 'archivo de resultados' creado por awkscript (además tengo más de una variable para exportar el código final de todos modos).
Como un script de prueba ejemplo, a Demo mi problema:
echo $MYSCRIPT_RESULT # returns nothing, not currently set
echo | awk -f scriptfile.awk # do whatever, setting MYSCRIPT_RESULT as we go
echo $MYSCRIPT_RESULT # desired: returns the env value set in scriptfile.awk
dentro scriptfile.awk, he intentado (sin éxito)
1 /) construir y ejecutar una cadena adhoc directamente:
{
cmdline="export MYSCRIPT_RESULT=1"
cmdline
}
2 /) usando la función de sistema:
{
cmdline="export MYSCRIPT_RESULT=1"
system(cmdline)
}
... pero estos no funcionan. Sospecho que estos 2 comandos están creando una subshell dentro del shell desde el que se está ejecutando awk y haciendo lo que solicité (probado al tocar archivos como una prueba), pero una vez que las llamadas al sistema/cmd se han completado, la subshell muere, desafortunadamente tomando lo que sea que haya establecido con él, por lo que los cambios en mi env no se adhieren a la perspectiva del "que llama del awk".
así que mi pregunta es, ¿cómo se configuran las variables de env dentro de awk directamente, para que un proceso de llamada pueda acceder a estos valores env después de que se complete la ejecución awk? ¿es realmente posible?
aparte de las formas de adhoc/system anteriores, que he demostrado que no funciona, no puedo ver cómo se podría hacer esto (aparte de escribir estos valores en un archivo "aleatorio" en algún lugar para ser recogido y leído por invocando script, que de todos modos está un poco sucio), ¡por lo tanto, ayuda!
todas las ideas/sugerencias/comentarios son bienvenidos!
no se puede hacer. esta es una regla básica de los entornos de SO, los procesos secundarios pueden cambiar ** su ** entorno pero no el entorno de sus padres. Lo mejor que puede hacer es, (a partir de un script de shell) 'myParentVar = $ (echo" $ myParentVar "| awk '{sub (/ xxxx /," yyyy ", $ 0); print $ 0}')' (donde 'sub (...) 'es un marcador de posición para cualquier modificación que desee realizar en $ myParetntVar. Buena suerte. – shellter
thx por la respuesta. yo estaba affraid que esto iba a ser el caso (padre/configuración env infantil y ámbito de influencia), así que creo que voy a tener que ir con un archivo de ensayo para estas variables env para la escritura del golpe de llamada para el acceso. THX para confirmar lo que creía que de todos modos :( – user1603289
que tenía un problema con esto también. lo que hice fue escribir la salida de awk a un archivo temporal y luego proceden del archivo temporal. Funciona. No estoy seguro si es elegante pero sigue siendo muy unixy. – qodeninja