zsh странное поведение с sudo --stdin и паролем со случайными символами

Вы можете сделать это в sed следующим образом:

sed -n '/^80:82:87/ { s/;//g; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; p }'
  • Параметр -n указывает sed не печатать входные данные , кроме когда это специально указано для этого.
  • В / ^ 80: 82: 87 / сказано, что команды внутри фигурных скобок {…} должны выполняться только в строках, начинающихся с 80:82:87 . Это дает вам те же функции, что и grep . Никогда не нужно перенаправлять grep в sed или awk .
  • Команда s /; // g удаляет все точки с запятой в строке, как вы сказали, что хотите. Если вы имели в виду двоеточия, просто измените его на s /: // g .
  • Команда y преобразует все строчные (латинские / ASCII) буквы в прописные. Если вам нужно только преобразовать MAC-адреса (и / или другие шестнадцатеричные значения), вы можете обойтись с помощью y / abcdef / ABCDEF / .
  • Наконец, выведите измененную строку.

@jasonwryan подтолкнул меня к пониманию того, что громоздкую команду y можно заменить на s / [[: lower:]] / \ U & / g , s / [[: alpha:]] / \ U & / g , или даже s /.*/ \ U & / - но только если вы используя GNU sed. \ U , похоже, не определен в POSIX.

1
16.04.2017, 13:01
1 ответ

pass root_password | sudo --stdin --shell succeeded. pass напечатал пароль, sudo прочитал его и запустил оболочку; вывод pass завершился, что означает, что поток, используемый для вывода pass и ввода оболочкой, был закрыт; оболочка успешно завершилась на EOF.

Последующие выполнения в пределах sudo окна тайм-аута не требовали аутентификации, поэтому оболочка сама получила пароль и попыталась выполнить его как команду, выдав эту ошибку.


Ваш псевдоним не может работать, если вам нужен shell или для выполнения какой-либо команды, читающей из stdin (но он работает для команд, которые этого не делают). Вы могли бы создать псевдоним, который выполнял бы pass root_password | sudo --stdin true, если хотите, а затем полагаться на таймаут для выполнения команд без пароля.

Вы также можете создать своего рода помощник askpass, который обеспечит нужное вам поведение. Он будет предоставлять пароль через pass, когда попросит об этом sudo.

4
27.01.2020, 23:19

Теги

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