【问题标题】:Save Commands Typed To Use later保存键入的命令以供以后使用
【发布时间】:2016-10-11 21:30:41
【问题描述】:

我正在寻找这样的东西:

$ startmem
$ command1
$ command2
$ command3
$ endmem

后来,我想这样称呼它: mem,执行命令。
要清除,只需再次使用startmem。有没有办法解决这个问题?

【问题讨论】:

  • 你试过defining a function吗?
  • 我希望能够将它与多组命令一起使用——这些命令可能会经常更改,所以我不希望每个命令都有一个函数。
  • 每次你有一组命令时,输入mem() { command1; command2; command3; },然后用mem运行它们。如果您有“多组命令”,以及您建议的流程,您将如何区分它们?使用该功能,您输入的内容甚至比您的建议更少。
  • 我认为这个想法是startmem 是开始“录制”宏的信号。当endmem 运行时,将定义一个名为mem 的函数,并将前面的所有命令作为主体。
  • 一个快速但未经测试的解决方案是将startmemendmem 定义为noop :。然后将 mem 定义为fc startmem endmem。执行startmem 只会添加到历史记录中。执行endmem 没有任何作用,并且也添加到历史记录中。 fc startmem endmem 将执行从startmemendmem 的命令。只要不关闭历史记录,这应该在登录后持续存在。

标签: linux bash shell memory


【解决方案1】:

你可以这样做:

startmem () { eval "mem() { $(sed '/^endmem/Q'); }"; }

这将接受您的输入,直到但不包括“endmem”行,并生成一个“mem”函数。


如果你想让它持久化,那么你别无选择,只能将它写入磁盘

startmem () { sed '/^endmem/Q' > ~/.mem_commands; }
mem ()      { source ~/.mem_commands; }

但是此时,您为什么不直接创建~/bin/mem,将~/bin 添加到您的PATH,并在您想要更改mem 文件时对其进行编辑。

【讨论】:

  • 这个答案让我因为使用​​了eval而感到不安。但是您正在输入命令,因此如果您的脚中弹,您就是将子弹装入枪中的人。
  • 嗯...有没有办法在我注销并重新登录后将其存储在内存中?
  • 只需将其添加到您的 .bashrc 文件中(如有必要,请创建它)。
  • 好吧,那么startmem 函数被定义了,但我的函数行没有。我每次都需要通过调用startmem 来“重做”内存语句。我不能只打电话给mem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多