Поиск login.defs
или LOGIN_TIMEOUT
действительно не дает релевантных результатов, а при просмотре loginutils / login.c действительно кажется, что значение и все таймер жестко запрограммирован:
enum { TIMEOUT = 60, EMPTY_USERNAME_COUNT = 10, / * Некоторые пользователи обнаружили, что ограничение в 32 символа слишком мало: * / USERNAME_SIZE = 64, TTYNAME_SIZE = 32, };
[…]
static void alarm_handler (int sig UNUSED_PARAM) { / * Это аварийный люк! Бедные пользователи последовательной линии и тому подобное * прибывают сюда, когда их соединение обрывается. * Мы не хотим блокировать здесь * / ndelay_on (STDOUT_FILENO); {{1 }} / * Проверка правильности восстановления attr: * запустить "getty 0 -" из оболочки, ввести поддельное имя пользователя, остановиться на запросе пароля *, подождать время ожидания. Без приведенного ниже tcsetattr *, когда вы вернетесь к приглашению оболочки, эхо будет по-прежнему отключено. * / tcsetattr_stdin_TCSANOW (& G.tty_attrs); printf ("\ r \ nLogin time out after% u seconds \ r \ n", TIMEOUT); fflush_all (); / * unix API - это мозг поврежден в отношении O_NONBLOCK, * мы должны отменить его, иначе мы можем повлиять на другие процессы * / ndelay_off (STDOUT_FILENO); _exit (EXIT_SUCCESS); }
[…]
int login_main (int argc, char ** argv) MAIN_EXTERNALLY_VISIBLE; int login_main (int argc UNUSED_PARAM, char ** argv) {
[…]
/ * Мы устанавливаем только обработчик тайм-аута _после_ сохранения G.tty_attrs * / signal (SIGALRM, alarm_handler); alarm (TIMEOUT);
Обратите внимание, что последняя часть не с отступом кажется, что вокруг него нет if
, поэтому он всегда выполняется. Возможно, вы могли бы раскомментировать последние две строки и заново скомпилировать busybox
, если это возможно.
Из примера inittab busybox :
# : Valid actions include: sysinit, respawn, askfirst, wait, once,
# restart, ctrlaltdel, and shutdown.
#
# Note: askfirst acts just like respawn, but before running the specified
# process it displays the line "Please press Enter to activate this
# console." and then waits for the user to press enter before starting
# the specified process.
Таким образом, вы можете просто изменить respawn
на askfirst
. Таким образом, / bin / login
по истечении тайм-аута просто вернется к приглашению Пожалуйста, нажмите Enter…
вместо того, чтобы сразу снова запустить / bin / login
.
Псевдонимы предназначены для интерактивных оболочек. Bash читает .bashrc
только при запуске интерактивной оболочки. Не существует файла конфигурации¹, который делает псевдонимы доступными для функции system
. Такая функция может быть опасной², потому что она повлияет на каждую команду оболочки, вызываемую приложением, и, возможно, заставит ее делать что-то неожиданное.
Чтобы сделать приложение доступным из любого места, убедитесь, что каталог, в котором находится исполняемый файл, находится в вашем пути поиска команд. Либо добавьте каталог к вашему пути в сценарии входа в систему, например.
PATH="$PATH:/opt/ltspice/bin"
или поместите символическую ссылку на исполняемый файл в каталог, который уже находится на вашем пути, например.
ln -s /opt/ltspice/bin/ltspice /usr/local/bin/ltsipce
¹ На самом деле так и есть — все распространенные оболочки sh
читают файл, обозначенный переменной среды ENV
. Но я не рекомендую использовать это в любом случае.
² Да. Пользователей Csh время от времени кусает их .cshrc
.Есть причина, по которой сценарии csh обычно начинаются с /bin/csh -f
.
Псевдонимы доступны только в сеансе, в котором они определены (поскольку они предназначены для интерактивного использования), поэтому Octave их не увидит.
Вместо этого я бы рекомендовал указать полный путь к ltspice
в вызове system()
.