Powerlevel9k содержит полдюжины ошибок, влияющих на правильную визуализацию подсказок. Это один из них :правое приглашение должно быть скрыто, если оно перекрывает левое приглашение, но powerlevel9k отображает его поверх левого приглашения, скрывая часть последнего в процессе.
Самое простое решение — переключиться на powerlevel10k--быструю обратную -совместимую повторную реализацию, в которой исправлены все известные ошибки и добавлено множество дополнительных функций.
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
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
, чтобы настроить подсказку через интерактивный диалог. Он установил еще лучшую политику усечения каталогов.
Кажется, проще всего передать его внешней команде:
printf "%s\n%s\n" "$user" "$password" | command_expecting_username_and_passwd
Это выведет содержимое $user
и $password
, за каждым из которых следует новая строка, и перенаправит вывод на stdin
внешнего процесса, который должен ожидать, что имя пользователя и пароль будут введены в этом порядке. user, если он был вызван интерактивно.
Если вы хотите выполнять более сложные операции, вы можете изучить ожидаемые скрипты.
Обратите внимание , что, как заявил Кусалананда, это работает только в том случае, если программа считывает их с их stdin
, а не напрямую с терминального устройства (, что, однако, кажется обычным при запросе аутентификационной информации ), и не будет работать при фактическом применении его к git
(, который вы представили как один из примеров использования ).
Вам нужен инструмент expect
.
https://linux.die.net/man/1/expect
Это инструмент для автоматизации взаимодействия с TTY.
Имейте в виду, что это небезопасно, и для отправки на github без пароля вы должны использовать ssh
git remote add origin git@github.com:name/repo
хотя удаленный «источник», вероятно, уже занят в вашем репозитории.
После того, как вы установили открытый и закрытый ключ ssh и добавили их в свой агент ssh, вам не нужно будет вводить пароль для отправки или извлечения