从 bash shell 中先前执行的命令中调用所有参数
Posted
技术标签:
【中文标题】从 bash shell 中先前执行的命令中调用所有参数【英文标题】:Recall all arguments from a previously executed command in 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 file
是Bash
理解中的参数。
啊,编辑并删除了“(参数列表的一部分)”部分。对困惑感到抱歉。这只是所有的论点
所有参数 但是如果你运行ls -l f1 f2 f3
你只想得到f1 f2 f3
而不是-l f1 f2 f3
对吧?
-l
是一个论点。 shell 不知道对待它与任何其他参数不同,ls
只是因为领先的-
而不同地对待它。
【参考方案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:*
【讨论】:
以上是关于从 bash shell 中先前执行的命令中调用所有参数的主要内容,如果未能解决你的问题,请参考以下文章
如何列出所有的 Bash Shell 内置命令 | Linux 中国