历史命令在终端中工作,但在写为bash脚本时不会

时间:2014-02-13 18:18:57

标签: linux bash shell terminal history

我有一个简单的单行程,在终端中完美运行:

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命令的特殊之处是什么阻止我们执行它?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

set -o history

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

history -r ~/.bash_history

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

答案 2 :(得分:0)

在bash脚本上默认禁用历史记录命令,这就是为什么甚至 历史命令在.sh文件中不起作用。为其重定向。好心地 在.sh文件中重定向bas​​h_history文件。

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

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

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