Вход предоставления к программе с подсказкой пароля

Регулярное выражение - это не глобус.

Я предполагаю, что вам нужны файлы, начинающиеся с "d". В этом случае вам нужно:

ls /etc | sort | grep '^d'

Что пошло не так

Как следующий оператор ведет себя, зависит от файлов в текущем каталоге:

ls /etc | sort | grep p*

Поскольку он не заключен в кавычки, оболочка попытается развернуть глобус p * , заменяя его на файлы с соответствующими именами из текущего каталога .

Если имена файлов не совпадают, литерал p * передается в grep . Поскольку grep ожидает регулярных выражений, он интерпретирует p * как означающий ноль или более вхождений буквы p . Поскольку все либо имеет p , либо нет, соответствует всему .

Почему grep d * ничего не перечисляет?

Вероятно, это означает, что в текущем каталоге было имя файла, начинающееся с d . Чтобы быть конкретным, предположим, что имя файла было дихотомией . Оболочка расширяет d * до дихотомии и передает это в качестве аргумента grep . Таким образом, эффективная команда:

grep dichotomy

Вероятно, поэтому не было результатов, когда вы запустили grep d * .

Что произойдет, если несколько файлов совпадают с глобусом d * ?

Рассмотрим команду:

grep d*

Если это несколько файлов, соответствующих этому глобу, скажем, dmesg daemon.log и dpkg.log . Оболочка расширит d * до списка этих файлов в алфавитном порядке (который зависит от вашей локали). Это может привести к следующему:

grep daemon.log dmesg dpkg.log

Эта команда ищет строку daemon.log в файлах dmesg и dpkg.log . Если этой строки нет в этих файлах, результат не будет.

1
22.03.2014, 00:21
2 ответа
printf \\n%.0b `seq 1 ${NUMBER OF TIMES YOU WANT}` | $CMD

Если ваш $CMD не любит трубу, вы можете попробовать:

printf 'PRESS CTRL+V then ENTER TWICE\n' >&2 ; read -r ENTER

$CMD <<YESALREADY
    $(printf "$ENTER\n%.0b" `seq 1 ${NUMBER OF TIMES YOU WANT}`)
YESALREADY

Если это не сработает, вам следует поискать решение вроде expect уже упомянутого, или pty. Например, zsh имеет встроенный zpty модуль.

0
27.01.2020, 23:52

Если echoing или yesing ввода в интерактивную программу не достаточно, чтобы обмануть ее, это обычно потому, что она пытается быть умной и проверяет, является ли ее ввод действительно терминалом или трубой. Для этого нужен молоток побольше; тот, которым обычно орудуют люди, это expect, который был написан для обхода этой проблемы.

1
27.01.2020, 23:52

Теги

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