历史记录命令在终端中工作,但在编写为 bash 脚本时不起作用



我有一个简单的单行代码,可以在终端中完美运行:

history | sort -k2 | uniq -c --skip-fields=1 | sort -r -g | head

它做什么:给出用户最近最常用的 10 个命令。(不要问我为什么要实现这样的事情)

我启动了一个编辑器,并在开头键入相同的#!/bin/bash

#!/bin/bash
history | sort -k2 | uniq -c --skip-fields=1 | sort -r -g | head

并说我将其保存为script.sh.然后,当我转到同一终端,键入bash script.sh并按Enter键时,没有任何反应。

到目前为止,我尝试过:谷歌搜索。许多人有类似的痛苦,但他们通过sudo su或添加/删除空格来解决。这些都不适合我。知道我可能哪里出错了吗?


编辑:

我想从终端本身执行此操作。运行此脚本的系统可能会也可能不会提供更改主文件夹中文件的权限。

BryceAtNetwork23 建议的另一个问题是,阻止我们执行它的 history 命令有什么特别之处?

只有在交互式 shell 中查看您的历史记录才有意义。使该命令成为函数而不是独立脚本。在你的 ~/.bashrc 中,把

popular_history() {
    history | sort -k2 | uniq -c --skip-fields=1 | sort -r -g | head
}

要使用来自非交互式 shell 的历史记录,您需要启用它;默认情况下,它仅在交互式 shell 中处于打开状态。您可以将以下行添加到 shell 脚本中:

set -o history

似乎只有交互式 shell 会默认读取默认历史文件,因此您需要使用下一行显式填充历史列表:

history -r ~/.bash_history

(有关使用默认.bash_history以外的文件的更多信息,请阅读bash手册页。)

默认情况下,

在 bash 脚本上禁用历史记录命令,这就是为什么即使历史记录命令在.sh文件中不起作用。用于其重定向。请重定向bash_history.sh文件中的文件。

也可以通过提及历史文件和更改运行时参数来启用历史记录机制,如下所述

#!/bin/bash
HISTFILE=~/.bash_history
set -o history 

注意:上面提到的脚本文件顶部的两行。现在历史记录命令将在历史记录中工作。

相关内容

  • 没有找到相关文章