使用bash历史来获得以前的命令,复制它,然后“运行”它,但命令注释

只是一个问题,以提高我的bash技能。 我总是这样做:

 $ history | grep some_long_command ... ... 123 some_long_command1......... 124 some_long_command2......... ... 

然后我可以运行命令我发现的命令:

!123

不过,我经常想这样做:

 some_long_command1foobar 

即我运行之前改变命令。 你可以使用bash来运行这个命令:

#some_long_command1

所以得到评论。

然后,我不必用鼠标突出显示命令,编辑它然后运行(我可以使用键盘 – 更快)。

我想我可以写一个脚本来做到这一点,但可能已经build立在某处的function….?

谢谢。

我build议不要使用历史命令,而是使用ctrl+r并开始键入该命令。 当你按下箭头键就好像去修改它,它会退出自动完成识别,并让你在运行之前编辑。

更新:另外,如果你想循环通过包含你刚input的string的不同命令,继续按ctrl+r

实际上,你可以附加:p命令打印它,而不需要实际运行。 例如:

 $ ls -la $ !!:p 

将前一个命令打印出ls -la而不运行,只需按 (向上)即可find并编辑它。

你也可以做

 !123:p 

打印出123rd命令作为您的上一个命令。

您也可以尝试使用fc命令编辑历史logging中的命令。

WIKI说,

fc是 Unix上的一个标准程序,它列出或编辑和重新执行之前input到交互式shell的命令。 fcbash shell中的一个内置命令; help fc会显示使用信息。


除了反向增量searchCtrl + R ),我们还有一些bash快捷键:

man bash

 以前的历史(Cp)
    从历史列表中获取前一个命令,然后移回列表中。 
 下一个历史(Cn)
    从历史列表中取出下一个命令,在列表中向前移动。 
 历史开始(M- <)
    移至历史logging的第一行。 
 历史结束(M->)
    移至input历史的末尾,即当前正在input的行。 
 反向search历史(Cr)
    从当前行开始向后search,并根据需要在历史logging中向上移动。 这是一个增量search。 
 前向search历史(Cs)
    从当前行开始向前search,并根据需要在历史logging中向下移动。 这是一个增量search。 
 非增量反向search历史(Mp)
    向后search从当前行开始的历史logging,使用用户提供的string的非增量search。 
 非递增前向search历史(Mn)
    使用非递增式search由用户提供的string向前search历史logging。
 yank-nth-arg(MCy)
    将第一个参数插入到前一个命令(通常是前一行中的第二个单词)。 使用参数n插入前一个命令中的第n个单词(前一个命令中的单词以单词0开头)。 负参数从前一个命令的末尾插入第n个单词。 一旦参数n被计算出来,参数被提取,就好像已经指定了“!n”历史扩展一样。
 yank-last-arg(M-。,M-_)
    将最后一个参数插入前一个命令(前一个历史logging的最后一个单词)。 有了论点,其行为完全像yank-n-arg。 对yank-last-arg的连续调用通过历史列表返回,依次插入每行的最后一个参数。 历史扩展设施用于提取最后一个参数,就好像指定了“!$”历史扩展。 
 shell展开线(MCe)
    像shell一样展开该行。 这将执行别名和历史扩展以及所有的shell扩展。 有关历史扩展的说明,请参见下面的历史扩展。 
 历史展开线(M- ^)
    在当前行上执行历史扩展。 有关历史扩展的说明,请参见下面的历史扩展。
 插入最后一个参数(M-。,M-_)
     yank-last-arg的同义词。 
 操作和下一步(Co)
    接受当前行执行,并从历史logging中获取相对于当前行的下一行以进行编辑。 任何参数都被忽略。 
 编辑和执行命令(C-xC-e)
    在当前命令行上调用编辑器,并将结果作为shell命令执行。
 !123:gs/old/new/ 

将运行命令123用string'new'replacestring'old'。

你可以通过点击M- ^(在mac上的option-shift-6)来进入编辑模式。

input这个:

!123M- ^

你会编辑命令#123。 这有点像使用ctrl-r,但是从感叹号语法开始。

你也可以放

 shopt -s histverify 

在你的.bash_profile ,这会导致任何历史扩展出现在你的命令行而不运行它,允许你在这之前进行编辑。

history-search-backward / history-search-forward绑定到可以轻松记住的快捷方式(我更喜欢PgUp / PgDown),而不是使用history命令。 要做到这一点,把它放到你的.inputrc文件中:

 "<key code>": history-search-backward "<key code>": history-search-forward 

要得到<key code> ,在shell中inputCtrl-V <key> ,然后在输出中replace起始的^[\e

设置好之后,你可以inputsome ,然后按PgUp来获取some_long_command 。 如果你需要some_long_command with_some_arg但是在历史后面some_long_command with_some_arg有类似的命令,你可以循环直到你inputsome ,然后重复点击PgUp,或者你可以inputsome ,点击PgUp,将光标移动到两个命令开始不同,input几个字符,再次点击PgUp。 这种快速浏览/区分类似命令的function使得我认为它比Ctrl-R更舒适。

你可能会尝试“build议框”的历史https://github.com/dvorka/hstr – 它读取Bash历史,并允许快速导航。

HH

要获得最后一个命令,只需键入hh,导航到该命令并使用右箭头在命令行上获得它(您可以在其中编辑和/或添加注释)。

^ p得到unix / solaris中的最后一个input的命令

别名r ='fc -s'

在你的.bashrc (主目录),然后你可以input

 r <whatever> 

在命令提示符处,您将执行历史logging中最后一个<whatever>命令(相同的参数)的副本。 只要点击箭头,看看你已经执行,如果你觉得需要。