Não sei o que está acontecendo, mas estou tentando entender o que está acontecendo com a entrada e a saída. Então aqui está o meu programa.
#include <stdio.h>
#include <stdlib.h>
int main(){
char pass[8];
fgets(pass, 8, stdin);
if (pass[1] == 'h'){
printf("enter shell\n");
system("/bin/bash");
printf("leave shell\n");
}
return 0;
}
E aqui estão alguns comandos do terminal. Quando eu corro regularmente, e introduzo 'hh', o shell fica aberto.
idkanything ~ $ ./a.out
hh
enter shell
bash-3.2$
Agora eu tento ecoar no pipe, mas o shell é fechado imediatamente.
idkanything ~ $ echo "hh" | ./a.out
enter shell
leave shell
Então, agora aqui está quando funciona:
idkanything ~ $ cat <(python -c 'print "hh"') - | ./a.out
enter shell
this work
/bin/bash: line 1: this: command not found
leave shell
Mas quando eu deixo de fora o '-' para stdin, ele não funciona como no shell fecha imediatamente.
idkanything ~ $ cat <(python -c 'print "hh"') | ./a.out
enter shell
leave shell
Quando eu tenho gato no final aqui, também funciona.
idkanything ~ $ (python -c 'print "hh"'; cat) | ./a.out
enter shell
this works
/bin/bash: line 1: this: command not found
leave shell
Alguém por favor pode explicar o que está acontecendo? O que especificamente sobre os comandos que funcionam faz com que o shell permaneça aberto? Por que o shell fica apenas aberto para esses comandos e não para os outros comandos, como "hh" e, em seguida, canalizando isso para dentro.
Eu acredito que pode ter algo a ver com stdout.