ksh 中的最后一个命令

ksh 中的最后一个命令

在 bash 中我可以使用!!来指示最后一个命令。在 ksh 中,我认为您可以用来r执行类似的操作,但它似乎在我的常见模式之一中失败:输入sudo [last command]

> cp foo /bar
cp: permission denied
> r c       # If I do this it will repeat my cp call
> sudo r c  # when I do this, it tells me that "r" is not a command

如何使用历史记录快速输入“sudo [最后一个命令]”?

答案1

我将使用命令行版本:输入Upand Home(或Ctrl+P然后Ctrl+ A,或 vi 模式下的其他序列),然后输入sudo␣并按Return

答案2

姆克什.mkshrc一段时间以来,它已经在其示例文件中提供了这个默认别名:

alias doch='sudo mksh -c "$(fc -ln -1)"'

在这里,“doch”是一个双关语,只有德语使用者才能理解,所以让我尝试解释一下:某些命令告诉您不允许做某事,这会导致是-否-是-否的情况,除非我们有德语中对此有一个特定的词。所以,这个别名是一个响应“nee-nee,我允许这么做!”到上面的错误消息。英语学习者也有这方面的内容,以防我太困惑……

但不要让这个别名的命名限制了你 ☺

答案3

我能做到这一点的最好方法是创建一个自动加载函数,例如sudo_r

function sudo_r {
  typeset comm=$(hist -nl ${@:- -1 -1} | sed 1q);
  print -- $comm;
  sudo $comm;
}

然后(比如说)“alias ss=sudo_r”。完成此操作后,您可以键入ss cp以重复以 开头的最后一个命令cp,但以 为前缀sudo。或者如果您输入ss Return,它将是sudo上一个命令。

答案4

自从我使用 ksh 以来已经有一段时间了,但我相信该命令recall通常别名为r

在 bash 中,您可以通过输入文本来回忆起以任何文本开头的最后一个命令,然后ESC CTRL-e,这比其他命令更有优势!样式历史命令,因为它只是“调用”命令而不执行它,因此给人们一个在执行之前编辑文本的机会

$ sudu <ESC><CTRL>-e

调用以命令行开头的最后一个命令sudo,在执行前进行编辑

相关内容