在Matlab中,有一个非常好的function,我喜欢。 假设我input了命令very-long-command
,然后input了几个命令。 然后,如果我再次需要长命令,我只需键入,然后按向上箭头键,我的长命令出现。 它find最后一个以very
开始的命令。 在unix命令行中我不能这么做,当我尝试这样做的时候,它忽略了我input的任何内容,并按照时间顺序返回到最后一个命令。 有没有办法做到这一点?
在bash中,按ctrl – r会让你做一个历史搜索:
$ echo 'something very long' something very long $ # blah $ # many commands later... (reverse-i-search)`ec': echo 'something very long'
在上面的代码片段中,我在后面的# many commands later...
的下一行中点击ctrl – r ,然后键入e c ,这使我回到了echo命令。 此时按Enter键将执行该命令。
在bash中,这个功能是由history-search-forward和history-search-backward命令提供的,默认情况下这些命令不会绑定到任何键上(参见这里 )。 如果你跑步
bind '"\e[A":history-search-backward' bind '"\e[B":history-search-forward'
它会在当前行的起点和点之间通过历史记录向后和向前搜索字符串。 另请参阅此相关的堆栈溢出问题 。
你可以用“!”做同样的事情。 例如:
$ echo "Hello" Hello $ !echo echo "Hello" Hello
然而,做这样的事情通常是一个糟糕的主意(如果最后的命令做了破坏性的事情呢?)。 如果你期望你会重用一些东西,那么我建议你创建一个shell脚本并把它保存在某处(当我打算重用某些东西的时候,我在〜/ .local / bin中创建一个脚本)。