TL; DR
Можете ли вы заблокировать ввод вставки в терминал, а sudo запрашивает пароль?
TL; DR
Иногда вы хотите скопировать и вставить длинную серию команд в терминал и запустить их последовательно. Если 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
...
...
...
Это работает, поскольку экземпляр терминала не будет запрашивать пароль еще раз.
Is есть более умный способ сделать это? Можете ли вы заблокировать вставку для копирования-вставки до тех пор, пока не будет предоставлен действительный пароль?
Да, есть простые способы сделать это.
Например. если вы хотите скопировать его в терминал:
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 << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja:
1
2
3
Да, есть простые способы сделать это.
Например. если вы хотите скопировать его в терминал:
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 << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja:
1
2
3
Да, есть простые способы сделать это.
Например. если вы хотите скопировать его в терминал:
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 << EOF
> sudo echo 1
> echo 2
> echo 3
> EOF
[sudo] password for wja:
1
2
3