![ejecute el script bash desde otro script y redirija su salida](https://rvso.com/image/1047584/ejecute%20el%20script%20bash%20desde%20otro%20script%20y%20redirija%20su%20salida.png)
Hola a todos tengo que hacer un programa.. Seré muy conciso al explicarlo... Y lo que ya he hecho y lo que tengo que hacer...
Simplemente, tengo que hacer un "simulador" en Bash que ejecute ejercicios de los estudiantes y verifique si son correctos... para cada ejercicio tengo que calcular una puntuación y decir si el estudiante ha aprobado el examen o no...
He hecho casi todo... Creo que solo me falta alguna línea de código por escribir... pero creo que son las más importantes también... :(
Mi script es TEST.SH y debo ejecutar el ejercicio del estudiante.. el ejercicio es un script ELABORADO.SH... Ahora, puedo tener algunos escenarios:
- ELABORADO.SH espera en el input como parámetro algunos valores;
- ELABORADO.SH espera en entrada desde stdin, desde teclado;
- ELABORADO.SH escribe la salida en un archivo/fifo/etc.. ;
El primer punto es realmente sencillo de resolver... de hecho, desde mi TEST.SH llamo
ELABORATO.SH
de esta manera:. ELABORATO.SH param1 param2 param3;
Segundo y tercero. Es más complejo para mí.
Tengo que leer una cadena de un archivo (y está bien) y pasar esta cadena
ELABORATO.SH
como si fuera de la entrada estándar.Tengo que crear un archivo con la salida de
ELABORATO.SH
... así que, por ejemplo, siELABORATO.SH
produzco un archivo (no sé el nombre del archivo de salida), también tengo que producir un archivo, en otro directorio... ¿Cómo puedo ¿Sí?
Respuesta1
Esto suena sospechosamente a tarea*, pero allá vamos.
¿Por qué conseguirías el
ELABORATO.SH
guión? Si lo hace y tiene unaexit
declaración o errores,TEST.SH
hace lo mismo. No creo que eso sea lo que quieres. Simplemente ejecutaría el script:bash ELABORATO.SH param1 param2
¿Pensaste en redirigir su entrada?
bash ELABORATO.SH param1 param2 < INPUT_FILE
Para capturar la salida de
ELABORATO.SH
, bueno, ¿no parece que la redirección simplemente seahecho¿para eso?bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
Averiguar qué archivos ELABORATO.SH
escribe no es trivial. (Al margen: si no conoce sus archivos de salida, ¿cómo podrían ser relevantes para calcular la puntuación de ELABORATO.SH
? ¿Por qué molestarse siquiera en moverlos?)
De todos modos, allá vamos. La siguiente canalización enumera los archivos creados por ELABORATO.SH
:
strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
| grep '^open(.*O_CREAT' | cut -d\" -f 2
Luego, para moverlos a otro lugar, podrías hacer:
for f in $(
strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE
| grep '^open(.*O_CREAT' | cut -d\" -f 2)
do
mv "$f" /path/to/elsewhere
done
*) Recomiende a la gente amigable de AskUbuntu a su supervisor.