使用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的命令。 fc是bash shell中的一个内置命令; help fc会显示使用信息。
除了反向增量search ( Ctrl + 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,导航到该命令并使用右箭头在命令行上获得它(您可以在其中编辑和/或添加注释)。
^ p得到unix / solaris中的最后一个input的命令
放
别名r ='fc -s'
在你的.bashrc
(主目录),然后你可以input
r <whatever>
在命令提示符处,您将执行历史logging中最后一个<whatever>
命令(相同的参数)的副本。 只要点击箭头,看看你已经执行,如果你觉得需要。