总结
当 sudo 提示输入密码时,您可以将复制粘贴输入锁定到终端吗?
更多信息
有时,您想将一长串命令复制并粘贴到终端中,并让它们按顺序运行。如果sudo
是任何命令的一部分,则会阻止该命令运行。
例如,使用其网站上提供的终端命令安装 Spotify:
# 1. Add the Spotify repository signing key to be able to verify downloaded packages
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
# 2. Add the Spotify repository
echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list
# 3. Update list of available packages
sudo apt-get update
# 4. Install Spotify
sudo apt-get install spotify-client
将其复制粘贴到终端将产生以下结果:
user:~$ # 1. Add the Spotify repository signing key to be able to verify downloaded packages
user:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
[sudo] password for user:
Sorry, try again.
[sudo] password for user:
所发生的情况是,终端将行“# 2. 添加 Spotify 存储库”解释为提供的密码(或者甚至可能将“”解释为密码,因为 sudo 命令和该行之间有一个换行符),在复制粘贴仍在输入到终端时锁定几秒钟,然后再次解锁以第二次尝试输入密码。
如果您有很多想要连续运行的命令,那么这种情况就很糟糕,因为一些非 sudo 命令将会运行,而 sudo 命令会被拒绝。
解决此问题的快速方法是先手动编写一个无意义的命令,例如$ sudo whatever
,然后输入密码,然后粘贴命令系列,如下所示:
user:~$ sudo whatever
[sudo] password for user:
sudo: whatever: command not found
user:~$ # 1. Add the Spotify repository signing key to be able to verify downloaded packages
user:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886
Executing: /tmp/tmp.JQ3ntmdbnL/gpg.1.sh --keyserver
hkp://keyserver.ubuntu.com:80
--recv-keys
BBEBDCB318AD50EC6865090613B00F1FD2C19886
...
...
...
这是可行的,因为终端实例不会再次提示输入密码。
有没有更聪明的方法来做到这一点?您可以锁定复制粘贴输入,直到提供有效密码吗?
答案1
是的,有很多简单的方法可以做到这一点。
首先,如果你只想获取后续命令的 sudo 权限,则可以使用sudo -v
而不是sudo whatever
。它会缓存你的凭据而无需运行命令。
假设你想将其复制粘贴到终端:
sudo echo 1
echo 2
echo 3
通常情况下会发生这种情况:
$ sudo echo 1
[sudo] password for wja:
Sorry, try again.
[sudo] password for wja:
1
相反,你可以使用大括号:
$ {
> sudo echo 1
> echo 2
> echo 3
> }
[sudo] password for wja:
1
2
3
或者你可以使用用这里的字符串进行 bash:
$ bash << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja:
1
2
3
或者(这可能是不受信任输入的最佳选择)你可以使用 Bash打开编辑器然后将您的代码片段粘贴到其中。默认快捷键是Ctrl- x, Ctrl- e。将您的输入粘贴到编辑器中,查看它,然后关闭并保存以运行它。