如何替换最近命令的第一个参数?

如何替换最近命令的第一个参数?

如果我在终端中运行这样的命令

$ tyop --count 3 --exact haveibeenpwned

该命令返回错误代码,例如

command not found: tyop,

如何重新运行最后一个命令,将命令行参数保留--count 3 --exact haveibeenpwned为另一个命令名称(例如typo而不是tyop)?

$ typo --count 3 --exact haveibeenpwned

如果可能的话,我正在寻找快捷方式或 shell 函数,例如!!!^

答案1

typo !*

man bash

Word Designators
   Word designators are used to select desired words from the event.  A :
   separates the event specification from the word designator.  It may be
   omitted if the word designator begins with a ^, $, *, -, or %.  Words
   are numbered from the beginning of the line, with the first word being
   denoted by 0 (zero).  Words are inserted into the current line
   separated by single spaces.

   *      All of the words but the zeroth.  This is a synonym for `1-$'.
          It is not an error to use * if there is just one word in the
          event; the empty string is returned in that case.

答案2

除了按向上箭头和手动编辑输入行等显而易见的事情之外,GNU 阅读线(如和其他几个程序所使用的bash)内置了一些有用的历史记录编辑功能。 !*如其他答案中提到的就是其中之一。

另一个是使用 的字符串替换功能^。从man bash

^string1^string2^

快速替换。重复上一个命令,将 string1 替换为
string2。相当于!!:s^string1^string2^(参见下面的修饰符)。

^tyop^typo^使用此功能,您可以通过键入并按 Enter 键来修复您的命令。

bash 的历史可以做的事情还有很多。运行man bash并搜索HISTORY EXPANSION并阅读该部分以及所有子部分(Event DesignatorsWord DesignatorsModifiers)。

顺便说一句,也值得阅读标题为 的部分READLINE,或者至少浏览一下它以大致了解它的功能。有关 readline 的完整文档可以在以下位置找到https://tiswww.cwru.edu/php/chet/readline/rltop.htmlhttps://tiswww.cwru.edu/php/chet/readline/readline.html

答案3

!$变量存储上一个命令的最后一个参数。

例子:

touch hello
cat !$ #equivalent to "cat hello" 

!*$_存储所有参数。

具有更多详细信息和替代命令的类似问题这里

相关内容