Как передать переменные оболочки команде, которая считывает консольный ввод в скрипте?

Powerlevel9k содержит полдюжины ошибок, влияющих на правильную визуализацию подсказок. Это один из них :правое приглашение должно быть скрыто, если оно перекрывает левое приглашение, но powerlevel9k отображает его поверх левого приглашения, скрывая часть последнего в процессе.

Самое простое решение — переключиться на powerlevel10k--быструю обратную -совместимую повторную реализацию, в которой исправлены все известные ошибки и добавлено множество дополнительных функций.

  1. Клонировать репозиторий:git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
  2. Установите ZSH_THEME=powerlevel10k/powerlevel10kв ~/.zshrc.

Это устранит вашу проблему и сделает вашу подсказку в 10 раз быстрее.

Теперь вы также можете использовать дополнительные функции powerlevel10k для улучшения подсказок. Например, вместо того, чтобы скрывать правую подсказку, когда она перекрывает левую подсказку, вы можете вместо этого сократить текущий каталог. Вот как:

# If directory is too long, shorten some of its segments to the shortest possible
# unique prefix. The shortened directory can be tab-completed to the original.
POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
# Shorten directory only when prompt doesn't fit.
POWERLEVEL9K_DIR_MAX_LENGTH=
# Replace removed segment suffixes with this symbol.
POWERLEVEL9K_SHORTEN_DELIMITER=

Вы можете увидеть это в действии в этом скринкасте .

Вы также можете запустить p10k configure, чтобы настроить подсказку через интерактивный диалог. Он установил еще лучшую политику усечения каталогов.

1
12.11.2020, 13:22
2 ответа

Кажется, проще всего передать его внешней команде:

printf "%s\n%s\n" "$user" "$password" | command_expecting_username_and_passwd

Это выведет содержимое $userи $password, за каждым из которых следует новая строка, и перенаправит вывод на stdinвнешнего процесса, который должен ожидать, что имя пользователя и пароль будут введены в этом порядке. user, если он был вызван интерактивно.

Если вы хотите выполнять более сложные операции, вы можете изучить скрипты.

Обратите внимание , что, как заявил Кусалананда, это работает только в том случае, если программа считывает их с их stdin, а не напрямую с терминального устройства (, что, однако, кажется обычным при запросе аутентификационной информации ), и не будет работать при фактическом применении его к git(, который вы представили как один из примеров использования ).

2
18.03.2021, 22:50

Вам нужен инструмент expect.

https://linux.die.net/man/1/expect

Это инструмент для автоматизации взаимодействия с TTY.

Имейте в виду, что это небезопасно, и для отправки на github без пароля вы должны использовать ssh

git remote add origin git@github.com:name/repo

хотя удаленный «источник», вероятно, уже занят в вашем репозитории.

https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh

После того, как вы установили открытый и закрытый ключ ssh и добавили их в свой агент ssh, вам не нужно будет вводить пароль для отправки или извлечения

0
18.03.2021, 22:50

Теги

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