为什么历史记录在子 shell 中不输出任何内容?

sdb*_*bbs 1 bash command-history

我刚刚意识到history在子 shell 中不会输出任何内容。我将尝试通过计算行数来显示 - 首先使用 echo 进行健全性检查:

$ echo a | wc -l
1
Run Code Online (Sandbox Code Playgroud)

...并在子外壳中:

bash -c 'echo a' | wc -l
1
Run Code Online (Sandbox Code Playgroud)

事实上,我们期望在这两种情况下都有一行输出。现在,对于history

$ history | wc -l
681
Run Code Online (Sandbox Code Playgroud)

...但在子外壳中:

$ bash -c 'history' | wc -l
0
Run Code Online (Sandbox Code Playgroud)

...history不返回任何行。

为什么会发生这种情况 - 如何history在子 shell 中输出当前 shell 的历史记录(包括最后一个会话命令)?

Mar*_*ler 7

-c不创建子shell;它只是创建一个非交互式的新 shell(或者更确切地说,在与当前 shell 无关的单独进程中创建一个非交互式执行环境)。并且:在非交互式 shell 中,该history命令故意不起作用:

bash 脚本中的历史命令