2 votos

¿Dar instrucciones a un ejecutable en UNIX?

Soy bastante nuevo en esto, así que disculpen si esto es muy fácil. El caso es que tengo un montón de instrucciones almacenadas en un archivo de texto llamado: 'FTIG_dldStruct.txt' y quiero escribirlas todas en un ejecutable llamado: 'STP'. He escrito este script:

#!/bin/bash
set +H

./STP # This is the executable

for i in {1..586} 
    do
        sed -n -e "$i"p FTIG_dldStruct.txt
done

Mi programa ejecuta el ejecutable, y me pide la entrada así:

STP> # Quiero las instrucciones aquí, pero mi bucle for no funciona hasta que salgo del ejecutable.

2 votos

Bienvenido Herber - el scripting está totalmente en el tema aquí como en varios otros sitios. No hay necesidad de ir a otro sitio a menos que no obtengas buenas respuestas en 2 semanas más o menos. Dicho esto, no te preocupes, eres nuevo. Puede editar y aclarar - ejecutable normalmente significa un programa compilado y scripts / programas interpretados son bash scripts. ¿Estás diciendo que necesitas ejecutar un programa y luego procesar un archivo cuando el programa termina?

0 votos

@MatthewBarclay Las preguntas sobre scripts (tanto para AppleScript como para shell scripts) son perfectamente on-topic en AD.

5voto

thrig Puntos 101

Parece que quiere enviar algún número (¿586?) de líneas de FTIG_dldStruct.txt a la ./STP ¿comando? Si es así, suponiendo que ./STP lee de la entrada estándar como es típico, eso puede parecer:

head -n 586 FTIG_dldStruct.txt | ./STP

Como se señala en los comentarios para pasar todo el contenido del archivo que sería:

./STP < FTIG_dldStruct.txt

También son posibles varias canalizaciones, quizás para filtrar los comentarios (aquí definidos arbitrariamente como líneas que empiezan por # ) con grep :

grep -v '^#' FTIG_dldStruct.txt | ./STP

Si necesita ./STP que se quede después de introducir esos comandos para que se pueda interactuar con el programa, eso es un tema más complicado y normalmente requiere un expect script que a su vez envuelve ./STP .

#!/usr/bin/env expect -f
set filehandle [open "FTIG_dldStruct.txt"]
set maxlines 586
spawn -noecho ./STP
while {[gets $filehandle line] >= 0 && $maxlines > 0} {
    # wait for prompt from program
    expect -ex "STP>"
    send "$line\r"
    incr maxlines -1
}
# turn interaction with the program over to the user
interact

Este código tendría que guardarse en un archivo y hacerse ejecutable como cualquier otro script en unix. expect también está disponible como biblioteca en otros lenguajes de programación.

1 votos

Si quieres enviar todo el contenido de FTIG_dldStruct.txt, es aún más fácil: ./STP <FTIG_dldStruct.txt .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X