Como enviar entrada em um novo terminal usando o Shell Script

1

Descobri como enviar automaticamente a entrada para um programa em C usando o Shell Script. Por exemplo, se eu compilar este programa em C:

//test.c
int main()
}
    int x;
    printf("Please enter an integer:");
    scanf("%d", &x);
  printf("\nYou entered %d\n", x);
}

e escreva este script:

#!/bin/bash
./test << EOF
5
EOF

e abra o terminal e execute o script que eu receberei esta saída:

Please enter an integer:
You entered 5

Agora, quero que o teste seja executado em um novo terminal, que descobri que posso fazer com este comando:
gnome-terminal -x ./test
O problema é que, se eu tentar fazer as duas coisas ao mesmo tempo no meu script (executar teste em um novo terminal E enviar entrada automaticamente), ele não funciona, a entrada não é enviada para o novo terminal, você apenas tem que se dar como você faria normalmente.

O que estou fazendo de errado e como consertar isso?

P.S. Desculpe se o formato está um pouco bagunçado, eu tentei.

    
por Devez 28.12.2014 / 09:27

3 respostas

1

Ele funcionará se você usar seu script de shell em vez do binário.

$ ~/tmp/term_test$ cat ./test_wrapper.sh 
#!/bin/bash 
./test << EOF
5 
EOF
read dummy
$ gnome-terminal -x  ./test_wrapper.sh 
$ 

A linha "read dummy" que adicionei impedirá que o terminal feche imediatamente quando o script for concluído.

Tem certeza de que precisa abrir uma nova sessão de terminal?

    
por 28.12.2014 / 11:08
0

Acho que encontrei uma maneira de conseguir o que você quer, mas acho que você vai querer aprender sobre redirecionamento para evitar a saída bastante confusa.

Eu usei controle de trabalho (& - executado em segundo plano) para poder executar 2 instâncias simultaneamente. Veja a página man bash para mais detalhes. Você também encontrará cobertura de redirecionamento.

Eu adicionei um sono para você C exemplo simplesmente para que ele não termine imediatamente. michael @ bunchan: ~ / tmp / term_test $ echo 5 | ./teste Por favor insira um inteiro: Você digitou 5 michael @ bunchan: ~ / tmp / term_test $ echo 99999 | ./teste Por favor insira um inteiro: Você digitou 99999 michael @ bunchan: ~ / tmp / term_test $

michael@bunchan:~/tmp/term_test$ 
$ cat test.c 
//test.c 

#include <stdio.h>
#include <unistd.h>

int main()
{ 
    int x;
    sleep(10);
    printf("Please enter an integer:");
    scanf("%d", &x); printf("\nYou entered %d\n", x);
}
$ ./test & << EOF
> 999
> EOF
[1] 10638
$ ./test & << EOF
5  
EOF

[2] 10639
$ jobsPlease enter an integer:
[1]+  Stopped                 ./test
[2]-  Running                 ./test &
$ Please enter an integer:jobs
[1]-  Stopped                 ./test
[2]+  Stopped                 ./test
$ 
    
por 31.12.2014 / 10:04
0

Aqui está uma resposta melhor à sua pergunta original, use um canal em vez de um redirecionamento.

$ echo 5 | ./test
Please enter an integer:
You entered 5
$ echo 99999 | ./test
Please enter an integer:
You entered 99999
$ 
    
por 31.12.2014 / 10:08