ответ рудимейера хорош - в частности,
часть об изменении 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
порождаются.
Да, возможны неинтерактивные оболочки входа в систему
$ head -1 /etc/profile
echo PROFILE BEING READ
$ echo echo hello | su -
PROFILE BEING READ
stdin: is not a tty
hello
$
Можно ли иметь неинтерактивную оболочку входа в систему (не вызываемую с помощью --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
, не имеют этого несоответствия.