Я дивлюся на напружений вихід запущеного процесу bash, підключеного до терміналу, для навчальних цілей.
Мій процес bash має PID 2883.
Я набираю
[OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace
У термінал. Тоді я переходжу до свого баш-процесу і маю таку взаємодію:
[OP@localhost ~]$ ls
Дивлячись на вихід, я бачу
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
...
Я заплутався в останніх двох рядках. Здається, Bash намагається написати два підказки оболонки? Що тут відбувається?
cat
, є дві відмінності: він читає вхідний рядок за рядком, і, хоча він повторює свій вхід назад до stdout, я бачу вхід двічі (один раз, коли я набираю, і один раз, коли кішка повторює його).