使用上一个命令的参数运行命令

Rad*_*anu 44 command-line bash

运行命令时,有时可能需要使用上一个命令的参数运行命令。你怎么能做到这一点?

当然,除了使用方向键和Del键:... DelDelDel... Del<new_command>

Rad*_*anu 62

例如,如果您运行此命令:

mkdir long_path_here/new_dir
Run Code Online (Sandbox Code Playgroud)

您很可能想进入最近创建的目录。您可以使用下一个“快捷方式”来做到这一点:

  • cd Esc.- 键入cd和 后按Esc后跟.(不同时)。如果前一个命令没有参数,您将获得前一个命令本身。
  • cd !*- 在这种情况下,您将从 previuos 命令获得所有参数。如果前面的命令没有参数,您将一无所获。
  • cd Alt+ .-cd在按下Alt.(同时)后输入和。事实上,使用这种方式并继续按.(不释放Alt),您将获得历史记录中每个命令的最后一个参数。如果命令没有参数,您将获得命令本身。

一般来说:<command> Esc.or<command> !*<command> Alt+ .

  • 哇,你为我节省了数百个小时,我最终会在接下来的几年里浪费掉 (3认同)

小智 42

如果您想要来自上一个命令的所有参数,或者只是最后一个参数,有一些快捷方式。

  • 对于所有参数: <command> !*
  • 对于最后一个论点: <command> !$

例子:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/
Run Code Online (Sandbox Code Playgroud)

如果您想要来自上一个命令的参数列表中的单个参数,您可以使用 <command> !!:<argNumber>

例子:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
Run Code Online (Sandbox Code Playgroud)

  • 在单个 arg 版本中,您只需要一个 `!`,例如,`!:2`。假设默认 bash。 (3认同)
  • 你也可以使用 `!^` 代替 `!:1`。 (3认同)

小智 8

提到!*!$是一件好事,但是当您需要做一些编辑时,readline 快捷方式来帮助您!

例如,而不是无数... DelDelDel...Del你可以只按 Ctrl-a(跳转到该行的开始) Alt+d(删除到单词的末尾)

欲了解更多信息man readline并搜索Default key bindings


小智 5

n个参数从以前的命令,键入Alt+ n+ Alt_。例如,之后:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

键入echo后跟Alt2Alt_将在下一个提示中为您提供:

$ echo 2
Run Code Online (Sandbox Code Playgroud)

点击后的“截图”Alt2是:

(arg: 2) echo
Run Code Online (Sandbox Code Playgroud)

您可以重复Alt_多次以n连续获取先前命令的第 th 个参数。

另一个有用的想法是定义 alias r="fc -s"。然后,您可以执行命令替换:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Run Code Online (Sandbox Code Playgroud)