【问题标题】:Recall all arguments from a previously executed command in bash shell从 bash shell 中先前执行的命令中调用所有参数
【发布时间】:2019-12-17 02:23:46
【问题描述】:

这个link 给出了如何在命令行中调用最后一个成功执行的命令的参数的指针。

我想从 shell 历史中访问特定命令的所有参数。

对我来说只有这种语法有效

ls f1 f2 f3
file !ls:1-3 --> file f1 f2 f3

而且,如果我使用 !* 应该给出前一个命令的所有参数会抛出错误

file !ls:!*
-bash: !: unrecognized history modifier

我只能使用这种语法(即最后执行命令的所有参数。

file !*

上述方法的问题是,如果我使用某个选项执行了 ls,例如:ls -l,然后是 file 命令会抛出不同的输出,因为在这种情况下,ls 的选项将被视为第一个参数。

【问题讨论】:

  • all the arguments (part of argument list) - 不清楚。您想要所有参数还是参数列表的一部分?在ls -l file 命令中-l fileBash 理解中的参数。
  • 啊,编辑并删除了“(参数列表的一部分)”部分。对困惑感到抱歉。这只是所有的论点
  • 所有参数 但是如果你运行ls -l f1 f2 f3 你只想得到f1 f2 f3 而不是-l f1 f2 f3 对吧?
  • -l 一个论点。 shell 不知道对待它与任何其他参数不同,ls 只是因为领先的- 而不同地对待它。

标签: bash


【解决方案1】:

尝试省略第二个!

$ ls foo bar baz
foo bar baz
$ echo !ls:*
echo foo bar baz
foo bar baz

【讨论】:

  • 我不确定这如何回答 OP 的问题。如果你像 OP 一样使用 ls -l,你会在输出中得到 -l,而 OP 不希望这样。
【解决方案2】:

!ls 返回最后一个ls 命令。如果你想要倒数第二个甚至更早的ls 执行,你可以使用history 来检索你想要的命令

history | grep ls

355  ls foo bar baz
446  ls -a
447  ls -ah

然后使用@Jon 解决方案或您的解决方案来获取争论

echo !355:*

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2011-10-16
    • 2014-01-11
    • 1970-01-01
    • 2017-05-02
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多