$ seq 10 | unbuffer -p od -vtc
0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n
Run Code Online (Sandbox Code Playgroud)
去了哪9
里10
?
$ printf '\r' | unbuffer -p od -An -w1 -vtc
\n
Run Code Online (Sandbox Code Playgroud)
为什么\r
改为\n
?
$ : | unbuffer -p printf '\n' | od -An -w1 -vtc
\r
\n
$ unbuffer -p printf '\n' | od -An -w1 -vtc
\r
\n
Run Code Online (Sandbox Code Playgroud)
搞什么?
$ printf foo | unbuffer -p cat …
Run Code Online (Sandbox Code Playgroud) 考虑以下(含sh
为/bin/dash
):
$ strace -e trace=process sh -c 'grep "^Pid:" /proc/self/status /proc/$$/status'
execve("/bin/sh", ["sh", "-c", "grep \"^Pid:\" /proc/self/status /"...], [/* 47 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7fcc8b661540) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcc8b661810) = 24865
wait4(-1, /proc/self/status:Pid: 24865
/proc/24864/status:Pid: 24864
[{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 24865
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24865, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
exit_group(0) = ?
+++ exited with 0 +++
Run Code Online (Sandbox Code Playgroud)
没有什么不寻常的,从主 shell 进程中grep
替换了一个分叉进程(这里是通过 完成的clone()
)。到现在为止还挺好。
现在使用 bash 4.4: …