Возможно ли наличие неинтерактивной оболочки входа в систему?

ответ рудимейера хорош - в частности, часть об изменении plays_dir_names для печати строк с завершающим нулем - , но из его ответа может быть не очевидно, что он выполняет find один раз для каждого каталога. Если этого достаточно, то хорошо. Но, конечно, можно вызвать find с несколькими начальными точками; например,

find  dir1 dir2 dir3  -find-options...

, и из вопроса следует, что это то, что вы хотите. Это можно сделать следующим образом:

printf "a\0a b\0a b c" | xargs -0 sh -c 'find "$@" -find-options...' sh

Это заставит xargs вызвать sh-c один раз, со всеми именами каталогов, добавленными к команда. Оболочка затем развернет "$ @" до списка этих имен каталогов.

P.S. Если производит_dir_names перечисляет слишком много имен каталогов для размещения в одной командной строке, тогда xargs будет вынужден создать несколько команд. Используйте xargs --verbose , чтобы узнать, какие команды xargs порождаются.

10
13.04.2017, 15:36
2 ответа

Да, возможны неинтерактивные оболочки входа в систему

$ head -1 /etc/profile
echo PROFILE BEING READ

$ echo echo hello | su -
PROFILE BEING READ
stdin: is not a tty
hello

$
3
27.01.2020, 20:02

Можно ли иметь неинтерактивную оболочку входа в систему (не вызываемую с помощью --login или -l)?

ДА.

$ (exec -a '-' bash -c 'shopt -q login_shell && echo login shell')

Однако обратите внимание, что / etc / profile не будет использоваться для оболочки входа без взаимодействия, если не указан аргумент - login .

Обычная идиома, вызывающая неинтерактивную оболочку входа в систему:

$ su - someuser -c somecommand

Но при этом страдает тот факт, что / etc / profile не запускается.

Это поведение можно изменить, но оно включает настройку исходного кода Bash во время компиляции, раскомментируя параметр, найденный в config-top.h :

/* Define this to make non-interactive shells begun with argv[0][0] == '-'
run the startup files when not in posix mode. */
/* #define NON_INTERACTIVE_LOGIN_SHELLS */

Когда я исследовал это su аномалия , я обнаружил, что другие оболочки, включая zsh и dash , не имеют этого несоответствия.

0
27.01.2020, 20:02

Теги

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