Как проверить, выполнила ли текущая оболочка zsh уже команды dircolors и stty?

Формат RAW поддерживает только предварительное выделение, поэтому вы получаете полноразмерный диск при преобразовании с помощью qemu-img .

Попробуйте преобразовать файл изображения vmdk в формат qcow2 , ведьма может работать без предварительного выделения.

2
11.06.2017, 14:52
1 ответ

В виджетах zleкажется zshзакрывает стандартный ввод. Я предполагаю, что zshхочет избежать того, чтобы команды в этих виджетах напрямую мешали пользовательскому вводу, но вместо этого было бы более разумно перенаправить стандартный ввод из /dev/null (это будет исправлено в следующем выпуске).

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

В dircolorsэто вызывает ошибку. dircolorsоткрывает ваш ~/.dircolors, а затем пытается сделать его своим стандартным вводом, не замечая, что он уже является его стандартным вводом (потому что это fd open()возвращает ).Таким образом, dup2(0,0)(дублирование стандартного ввода на себя) завершается ошибкой EBADF, о которой сообщает dircolors.

sttyоткрывает настройки терминала на его стандартном вводе. Здесь стандартный ввод закрыт, поэтому sttyвозвращается с ошибкой.

Здесь вы можете изменить свой виджет, чтобы он восстанавливал стандартный ввод терминала:

reread_zshrc () . ~/.zshrc < $TTY

Но обратите внимание, что изменение настроек tty из виджета zle(хотя я не знаю, какой у вас ]stty) — плохая идея, так как zleустанавливает tty в специальный режим для редактирования строки, с которым вы не хотите напортачить (и в конце редактирования обычный настройки tty все равно будут восстановлены, поэтому внесенные вами изменения будут потеряны).

Так что, возможно, вместо этого вы должны сделать stdin /dev/null(поскольку вы действительно не хотите делать что-то с терминалом там), но sttyвсе равно будет жаловаться ( поскольку /dev/nullне является устройством tty), поэтому вы также можете перенаправить stderr на /dev/null, чтобы скрыть эти сообщения об ошибках (хотя это скроет всесообщения об ошибках ):

reread_zshrc() . ~/.zshrc < /dev/null 2> /dev/null
4
27.01.2020, 21:58

Теги

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