Вход вставки копии блокировки к терминалу, в то время как sudo запрашивает пароль

TL; DR

Можно ли заблокировать вход вставки копии в терминал, в то время как 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 и той строкой), блокировки в течение нескольких секунд, в то время как вставка копии все еще вводится к терминалу и затем разблокировала снова для второй попытки пароля.

Это плохо, если у Вас есть много команд, Вы хотите работать последовательно, с тех пор некоторые команды non-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
задан 25 July 2017 в 19:25

1 ответ

Да, существуют простые способы сделать это.

Например, если Вы хотите к вставке копии это в терминал:

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

Или можно использовать удар с herestring:

$ bash << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja: 
1
2
3
2
ответ дан 7 December 2019 в 13:31

Другие вопросы по тегам:

Похожие вопросы: