为什么 bash 不存储以空格开头的命令?

san*_*dyp 66 bash command-history whitespace

如果我执行一系列命令,例如:

$ ls
$ grep abc file.txt
Run Code Online (Sandbox Code Playgroud)

然后使用向上箭头键获取上一个,终端将显示最后一个cmd(这是grep这里)

但如果我做这样的事情:

$ ls
$   grep abc file.txt
Run Code Online (Sandbox Code Playgroud)

wheregrep前面有空格,向上按给出ls,而不是grep

为什么是这样?

Hau*_*ing 75

echo $HISTCONTROL
ignoreboth
Run Code Online (Sandbox Code Playgroud)

男人猛击:

组织控制

以冒号分隔的值列表,用于控制命令在历史列表中的保存方式。如果值列表包括ignorespace,以空格字符开头的行不会保存在历史列表中。值ignoredups导致匹配先前历史条目的行不被保存。的值ignorebothignorespaceand 的简写ignoredups

  • Ciro,我假设您可以输入类似`echo "drop database mydb" | 这样的命令。mysql -u root -pPassword` 并没有将其保存在历史记录中。 (12认同)
  • 并且`HISTCONTROL` 至少在`debian` 提供的默认`~/.bashrc` 中设置为`ignoreboth`。 (4认同)
  • `ignorespace` 的用例是什么? (2认同)
  • 在 Ubuntu 14.04 中,默认值是 `ignoreboth`,这有点烦人。 (2认同)
  • 对于 Mac 用户,HISTCONTROL 未设置为任何内容,因此您需要将其添加到 bash_profile 或类似文件中 - https://unix.stackexchange.com/questions/115917/why-is-bash-not-storing-commands -that-start-with-spaces (2认同)