Tru*_*ufa 132 command-line sudo
有时,当我运行命令时,我没有注意到我需要以超级用户身份运行它才能获得足够的权限。
有没有办法以超级用户身份再次运行相同的命令?
Tru*_*ufa 216
最简单的方法是运行:
sudo !!
Run Code Online (Sandbox Code Playgroud)
这将运行最后一个命令,但作为超级用户。
来源。
小智 17
您可以尝试使用向上箭头键滚动浏览旧命令并重写/更改它们并sudo在它们前面添加。(箭头键上方的主页按钮会将位置设置为开头。)
我不喜欢这个sudo !!想法,因为有时你在中间添加了另一个命令并且不再记得了。
Oli*_*lac 14
我将添加一个替代方案:与打字一样简短sudo !!且更灵活:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
Run Code Online (Sandbox Code Playgroud)
它的击键次数完全相同(我将“ctrl+A”算作一次……),但是添加“向上箭头”,您可以对历史记录中的任何命令执行此操作。
ari*_*ica 14
这个问题可以概括为“运行相同的命令但进行一些修改”,因为 Unix 中的一个出色的设计决策是,在 shell 中实现一次的内容可以被从 shell 调用的任何命令利用。
换句话说,这一招并不适用刚刚 于sudo:
sudo !!)身份重复上一条命令time !!)env A=b B=z !!)!!)历史扩展(也称为历史替换)只是一个 shell 功能,可以使重复以前的命令更容易(用更少的击键)。检查您的 shell 手册页中的history expansion. 它描述了更多你可以用历史做的技巧和捷径,例如:
您可以按编号参考以前的命令:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
Run Code Online (Sandbox Code Playgroud)
您可以参考之前命令中的单个单词:
some-command !$ # run some-command on the last arg of previous command
Run Code Online (Sandbox Code Playgroud)
您还可以在重复之前搜索:
!?awk # repeat the last command including the string 'awk'
Run Code Online (Sandbox Code Playgroud)
您可以搜索历史记录并用其他内容替换某些内容:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
Run Code Online (Sandbox Code Playgroud)
还有更多,因为您可以独立组合命令选择、参数选择、搜索和替换。
您的 shell(在本例中man bash)的手册页是您的朋友。
小智 6
我使用的zsh,而不是猛砸,并有这在我的~/.zshrc,所以按Alt+S刀片sudo在命令行的开头:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法找到在 bash 中做同样事情的方法。