Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash别名中使用history命令_Bash - Fatal编程技术网

在Bash别名中使用history命令

在Bash别名中使用history命令,bash,Bash,因此,我对Bash非常不熟悉,并且在不断尝试和错误的过程中不断学习。我想知道为什么以下方法不起作用: 我在bashrc文件中定义函数repeat repeat () { history > /dev/null !-2 } 然后在同一文件中调用它,如下所示: alias .="repeat" 是的,我知道我在劫持dot操作符,但我有自己的别名(专门用于sourcing~/.bashrc)。其思想是能够编写,并让它重复最后一个命令。如

因此,我对Bash非常不熟悉,并且在不断尝试和错误的过程中不断学习。我想知道为什么以下方法不起作用:

我在bashrc文件中定义函数
repeat

repeat () {
         history > /dev/null
         !-2
}
然后在同一文件中调用它,如下所示:

alias .="repeat"
是的,我知道我在劫持dot操作符,但我有自己的别名(专门用于sourcing~/.bashrc)。其思想是能够编写
,并让它重复最后一个命令。如果我在交互式shell中手动键入命令,但在别名中不是这样工作的,则可以使用此选项。不要介意它不能重复多次,我只是想在解决这个问题之前让它工作起来。当我键入
时,我得到以下输出:

bash:-2:未找到命令

我认为当以非交互方式调用时,
history
没有从我的历史记录文件中读取,并且在其历史记录中不包含任何命令,但这将输出我的历史记录:

repeat () {
        history
        !-2
}
然而,我得到了同样的结果。
命令似乎不起作用

知道我做错了什么吗

编辑:我现在就让它按我想要的方式工作(请告诉我是否有更优雅的解决方案),但我想摆脱要执行的命令,即我只需要命令本身的输出。我想我应该试试这样的东西:

 19 repeat () {
 20         for ((i = 0; i<${1}; i++ ))
 21         do
 22                 $(fc -s) | tail -n +2
 23         done
 24 }
 25
 26 alias .="repeat 1"
 27 alias 1.="repeat 1"
 28 alias 2.="repeat 2"
 29 alias 3.="repeat 3"
 30 alias 4.="repeat 4"
 31 alias 5.="repeat 5"
 32 alias 6.="repeat 6"
 33 alias 7.="repeat 7"
 34 alias 8.="repeat 8"
 35 alias 9.="repeat 9"
 36 alias 10.="repeat 10"
19重复(){

20对于((i=0;i您可以使用
fc
命令,该命令“用于从历史记录列表中列出或编辑并重新执行命令”。Bash给出了一个示例

一个有用的别名是
r=“fc-s”
,这样键入
r cc
将运行以
cc
开头的最后一个命令,键入
r
将重新执行最后一个命令


在函数中执行的命令不会显示在命令历史记录中。我无法理解此别名的意义。对于最后一个命令,您有向上箭头,其好处是您可以在运行前检查它。对于最后一个命令之前的一些命令,只需点击向上箭头,直到看到正确的命令。这似乎比r更容易、更安全e记住您想要的命令现在是数字5。对于较旧的命令,您可以使用Ctrl-R在历史记录中向后搜索。最后,这将适用于任何其他使用Bash的Linux或Mac计算机,而无需任何特殊配置。@mivk My up arrow key是一个双功能键,这意味着它发送不同的keycode depending取决于它是被点击还是被按下。因此它感觉比其他方式慢,而且这肯定比你建议的快,这是我一直在做的。但是,我想你可能对这些别名有点误解,它们不是指历史上的特定命令,而是指代重复,就像在vim中输入
5一样。
重复最后一个命令五次。我只会用它来重复我刚输入的命令。@Bridge啊,对不起。我误解了你的意思。当然,我不知道你有奇怪的箭头键;我希望我永远不用处理这样的键盘…:-)谢谢!这正是我要找的。