Отличная копия и вставка из моего документа - приятно знать, что это находит применение :-)
У меня проблемы почти со всеми программами ввода пароля, такими как те, что я перечислил, и размещенные slm.Они обычно были разработаны для использования конкретной программы, обычно SSH, и практически без вариантов. И да, я знаю, что именно этого хочет автор сообщения.
Но есть много ситуаций, когда вы хотите, чтобы программа читала пароль для других целей (шифрование, монтирование, ограниченный доступ), и до сих пор каждая программа, которую я просмотрел, имеет проблемы с перепрофилированием.
Например:
Без опций: (почти все программы ssh-askpass - кроме x11-ssh-askpass)
Нет контроля над заголовком окна (pinentry, x11-ssh-askpass)
Или просто выглядит громоздко и ужасно (Xdialog)
Отсутствие контроля над фокусом клавиатуры или захватом клавиатуры (они разные!)
Также при шифровании файлов вы хотите, чтобы пользователь набрал пароль дважды (чтобы убедиться, что он правильный), и сравнить их (либо программой askpass, либо оставив на усмотрение вызывающего пользователя). В настоящее время ни одна программа для окон X не позволяет вводить пароль дважды. :-(
Мой текущий выбор - 'zenity' и 'x11-ssh-askpass', но в нынешнем виде большинство из вышеперечисленных программ не помешало бы иметь больше и лучше вариантов!
Убедитесь, что printenv
не имеет значения для PATH. Если вы что-то найдете, это, вероятно, из вашего ~/.bashrc
. Если он пуст, он был установлен самим Bash. Когда оболочка запускается, если она не может найти значение для PATH, она установит его, потому что без PATH мало что будет работать.
Вы можете посмотреть, как это делается в исходном коде (Я смотрю на исходники Bash 4.4):
/* Now make our own defaults in case the vars that we think are
important are missing. */
temp_var = set_if_not ("PATH", DEFAULT_PATH_VALUE);
#if 0
set_auto_export (temp_var); /* XXX */
#endif
Вconfig-top.h
вы можете найти определение (, которое соответствует указанному вами PATH):
/* The default value of the PATH variable. */
#ifndef DEFAULT_PATH_VALUE
#define DEFAULT_PATH_VALUE \
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
#endif
Я считаю, что часто считается плохой практикой помещать .
в PATH, потому что это очень упрощает случайное выполнение!
Как поясняется в руководстве к оболочке Bourne Again, для переменной оболочки PATH
существует значение по умолчанию, если нет переменной окружения PATH
для ее инициализации и переменная оболочки не задана в сценарии запуска.
То, что это значение зависит от, согласно руководству, "системного администратора, который устанавливает bash
". На самом деле это зависит от того, какие варианты выбрал тот, кто компилировал оболочку Bourne Again из исходников.
% unsetenv PATH `command -v bash` -c 'echo $PATH ; printenv PATH' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. %
$ unsetenv PATH `command -v bash` -c 'echo $PATH ; printenv PATH' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. $
% unsetenv PATH `command -v bash` -c 'echo $PATH ; printenv PATH' /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin %Это было исправлено в марте 2017 года путем настройки параметров компилятора, используемых для сборки программного обеспечения.
Тот факт, что printenv
не печатает строку, говорит вам, что эта переменная оболочки по умолчанию PATH
не экспортируется в переменную окружения, между прочим.