不是一个真正的问题,而是一个观察。当我在 Linux 上执行 sys ad 时,我喜欢在命令前加上一个哈希“#”来校对我要执行的内容,并留下一个面包屑,以便我稍后可以返回。
我最近发现,在 macOS Catalina 上(这是我现在的主要工作机器),它bash
不会在历史文件中打印带有前导哈希的行,而在其他版本的 Linux 中似乎并非如此,例如 RHEL、Ubuntu
$ echo $SHELL
/bin/bash
$ echo foo
foo
$ #echo bar
$ !:p
echo foo
$ echo $SHELL
/bin/sh
$ echo foo
foo
$ #echo bar
$ !:p
#echo bar
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15
BuildVersion: 19A602
输出$HISTIGNORE
$HISTCONTROL
当然
$ echo 0e"$SHELL\n$HISTIGNORE\n$HISTCONTROL"
/bin/sh
$ echo -e "$SHELL\n$HISTIGNORE\n$HISTCONTROL"
/bin/bash
答案1
这似乎是 Catalina 独有的。我还没有升级。
$ echo
$ # hello
$ !:p
# hello
$
我也使用这个“功能”,因此找到一种方法来解决这个问题会很有用。
为了完整性:
$ echo \"$HISTIGNORE\"
""
$ echo \"$HISTCONTROL\"
""
答案2
我只想回答我的问题
@egmont 你说得对,bash 附带的版本真的很旧
我的解决方案是升级 bash。
Medium 上的这篇文章清楚地解释了如何在 MacOS 上升级 bash,这也是我让以 开头的命令#
再次打印在历史记录中的方法。
https://itnext.io/upgrading-bash-on-macos-7138bd1066ba
我将发布使用 Homebrew 在 MacOS 中升级 bash 的步骤
$ brew install bash
$ sudo echo /usr/local/bin/bash >> /etc/shells
$ sudo chsh -s /usr/local/bin/bash # for the current user
以下是升级 bash 前后的一些测试
升级 bash 之前
$ echo foo
foo
$ #echo bar
$ !:p
echo foo
$ bash --version
GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin19.0.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
升级 bash 后
$ echo foo
foo
$ #echo bar
$ !:p
#echo bar
$ bash--version
-bash: bash--version: command not found
Geralds-MacBook-Pro:~ gerald$ bash --version
GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin19.0.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.