将命令保存到历史记录,而无需在bash中执行


8

有没有一种方法可以在不执行命令的情况下将其保存在bash历史记录中?例如

$ cmd [a long list of arguments] 

现在我在打字时记得要先做别的事情。我可以给一些东西吗

$ cmd [a long list of arguments][some-key-strokes]

而这实际上并没有执行,而是进入了bash历史记录,以便以后可以使用?


5
在这种情况下,我只需在该行前面加上#,然后按Enter。
奥利弗·查尔斯沃思

Answers:


5

也许有更好的方法,但是您可以使用历史记录扩展的:p修饰符来打印当前注释行,而无需执行。 !#是当前行,%它本身不会匹配任何内容

$ cmd [arguments] !#%:p

凉!;)并且不需要在命令中转义特殊字符,如果命令不只是ls -al+1,那么可能会变得混乱

凉!非常整洁

8

-shistory命令使用选项:

history -s cmd arg1 arg2

history -s方便的是,对自身的调用不会添加到命令历史记录中,因此在您的历史记录中,它看起来就像您cmd实际上没有执行那样。


凉!这也很棒

1

通常这是通过

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

请注意,历史记录的名称在您的系统上可能有所不同。因此,您可以使用HISTFILE环境var

是什么使得:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"

1

通常,我只需在行的开头添加#即可将行转换为注释:

#cmd [a long list of arguments] 

我更喜欢这种方式,因为您只需3 [4,如果需要SHIFT插入#]键即可

^a#<ENTER>

^ a转到当前行的开头

#添加评论

ENTER执行注释


0

在这种情况下,我只需在行前面加上#,然后按Enter。

...或使用组合键: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

另请参阅:Bash-保存命令而不执行


0

您可以尝试添加空格和| (管道)在行的末尾,按Enter,然后按Ctrl-C'ing。

Space|EnterCtrl+ C

该命令将在您的历史记录中带有| |。在末尾(可以简单地使用退格键删除),而不是在开头添加#(删除起来可能更麻烦)。

免责声明:我不知道这是否总是有效!使用风险自负!

$ cmd [长参数列表] |

> Ctrl+C

$ Up

$ cmd [长参数列表] |


0

您可以尝试使用此行:

history -s -p $COMMAND

来自help

The -p option means to perform
history expansion on each ARG and display the result,

这意味着您可以扩展类似的内容!!并将结果存储在历史记录的底部。


history -s是两年前给出的答案。会-p有所改善吗?怎么-p办?(在一定意义上,您应该修改答案以使其变得更好,而不用其他评论回应我的评论。)
G-Man说'Reinstate

0

另一种选择是转到行的开头,然后执行要执行的操作,然后是&&,例如

rm old_file && cmd [args]

因此,如果您要执行的操作成功,则命令将立即运行,如果失败,则命令将不会运行,但将保留在历史记录中。你也可以

test && cmd [args]

由于没有参数的测试将失败,但是与该#方法相比,这是额外的几次击键。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.