无论参数如何,我都想忽略我的 bash 历史记录中对命令的所有调用。例如,要排除所有ls
、ls -l
和ls SOME_DIRECTORY
,我的理解是我需要这样做:
HISTIGNORE='ls:ls *'
我不能仅仅HISTIGNORE='ls*'
因为那也会忽略其他以 开头的命令ls
,这是不可取的。但是,ls
当ls *
我将条目添加到HISTIGNORE
.
有没有一种模式可以用来匹配命令本身和参数?
无论参数如何,我都想忽略我的 bash 历史记录中对命令的所有调用。例如,要排除所有ls
、ls -l
和ls SOME_DIRECTORY
,我的理解是我需要这样做:
HISTIGNORE='ls:ls *'
我不能仅仅HISTIGNORE='ls*'
因为那也会忽略其他以 开头的命令ls
,这是不可取的。但是,ls
当ls *
我将条目添加到HISTIGNORE
.
有没有一种模式可以用来匹配命令本身和参数?
我想使用 bashCDPATH
指向我经常访问的目录的符号链接目录。但是,做:
CDPATH="~/symlinks"
如果两者都存在,则导致cd SUBDIR
停止工作;目录优先于当前工作目录。./SUBDIR
~/symlinks/SUBDIR
CDPATH
我试图通过使用以下方法来解决此问题:
CDPATH=".:~/symlinks"
这确实解决了优先级问题,但现在cd
访问子目录总是打印其完整路径:
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
这有点烦人。我知道我可以通过执行来抑制所有cd
输出alias cd='> /dev/null cd'
,但我确实喜欢为其他CDPATH
条目打印的路径(或执行时cd -
)。有什么更好的我可以做的吗?
在我的 bash 交互式 shell 中输入命令时,我打错字的情况并不少见。我希望能够更正我的 bash 历史记录中的错字,这样不正确的命令就不会污染它并导致我以后不小心重新执行它。特别是,我想编辑最后一个命令。
有很多 问题询问如何防止意外编辑 bash 历史记录。 我想要相反:我想明确地编辑历史。
根据参考问题的一些解释,我尝试这样做:
$ echo foo
按Up,将其更改为:
$ echo foobar
按Down,但什么也没做,如果我再按Enter,它将执行修改后的命令并保留两者
echo foo
echo foobar
在我的历史中。
我知道我可以使用 手动删除历史条目history -d
,但我还没有设计出一种方便使用它的好方法。我不想制作一个 shell 函数来无条件地删除最后一个历史条目,因为我仍然希望能够用来Up加载最后一个条目以便我可以更正它。我可以进行更正,然后删除倒数第二个历史条目,但这感觉很笨拙,而且对于长时间运行的命令来说尤其烦人,因为我要么需要记住稍后执行额外的步骤,要么需要暂时挂起它,执行这些步骤,然后继续。
我想要的是:
理想情况下,我希望能够按Up,对我以前的命令进行更正,然后按一些特殊的键绑定或向命令行添加一些魔术标记,以使其在执行时替换历史记录条目。
还可以按其他键序列从历史记录中检索和编辑命令(类似于 Ctrl+R),该命令在执行时会覆盖历史记录条目。
删除倒数第二个历史条目的健壮shell 函数是可以容忍的,但并不理想。
我想其他人肯定也会打错字,当这样的命令污染他们的历史时,他们也会同样生气。其他人做什么?