![为什么历史记录在子 shell 中不输出任何内容?](https://linux22.com/image/199209/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E5%9C%A8%E5%AD%90%20shell%20%E4%B8%AD%E4%B8%8D%E8%BE%93%E5%87%BA%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我刚刚意识到history
在子 shell 中不会输出任何内容。我将尝试通过计算行数来显示 - 首先使用 echo 进行健全性检查:
$ echo a | wc -l
1
...并在子外壳中:
bash -c 'echo a' | wc -l
1
事实上,我们期望在这两种情况下都有一行输出。现在,对于history
:
$ history | wc -l
681
...但在子外壳中:
$ bash -c 'history' | wc -l
0
...history
不返回任何行。
为什么会发生这种情况 - 如何history
在子 shell 中输出当前 shell 的历史记录(包括最后一个会话命令)?
答案1
-c
不创建一个子外壳;它只是创建一个非交互式的新 shell(或者更确切地说,是一个与当前 shell 无关的单独进程中的非交互式执行环境)。并且:在非交互式 shell 中,该history
命令故意不起作用: