Estoy mirando la salida de un proceso bash en ejecución conectado a una terminal, con fines educativos.
Mi proceso de bash tiene PID 2883.
yo tecleo
[OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace
En una terminal. Luego entro en mi proceso de bash y tengo la siguiente interacción:
[OP@localhost ~]$ ls
Mirando la salida, veo
strace: Process 2883 attached
read(0, "l", 1) = 1
write(2, "l", 1) = 1
read(0, "s", 1) = 1
write(2, "s", 1) = 1
read(0, "\r", 1) = 1
write(2, "\n", 1) = 1
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fec6b1d8e50) = 3917
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3917, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
write(1, "\33]0;OP@localhost:~\7", 23) = 23
write(2, "[OP@localhost ~]$ ", 22) = 22
...
Estoy confundido en las dos últimas líneas. Parece que bash está intentando escribir dos indicaciones de shell? ¿Que está pasando aqui?
cat
, hay dos diferencias: lee la entrada línea por línea, y mientras hace eco de su entrada de nuevo a stdout, veo la entrada dos veces (una cuando escribo y una vez cuando cat hace eco).