В обоих случаях $@
расширяется вашей текущей оболочкой перед запуском find
, поскольку она находится в строке -в двойных кавычках. Я предполагаю, что вы установили $1
на1
(и запустите printf "%s\n" "$@"
, чтобы увидеть текущие значения позиционных параметров ).
Чтобы проводить ваши эксперименты, как я думаю, вы должны использовать одинарные кавычки вокруг команды и двойные кавычки вокруг $@
(, чтобы избежать дополнительного разбиения ); например:
find. -exec sh -c 'ls -l "$@"' sh {} \;
Когда пользователь входит в систему, вызываются библиотеки PAM, и обычно конфигурация PAM вызывает pam_env.so
для настройки среды для пользователя. Эта установка включает в себя чтение /etc/environment
.
В традиционном сценарии запуска службы SysVinit вы можете использовать su
для запуска службы от имени пользователя, не являющегося -root; su
также будет вызывать библиотеки PAM и поэтому будет читаться как /etc/environment
, что очень похоже на вход обычного пользователя.
Но systemd
также предназначен для работы во встраиваемых системах, где библиотеки PAM могут вообще отсутствовать. Таким образом, если служба systemd настроена для работы от имени пользователя, отличного от -, systemd
будет обрабатывать инициализацию среды, не полагаясь на какие-либо внешние библиотеки.
См. параграфENVIRONMENT
справочной страницы systemd.exec(5)
для получения информации о настройках, которые можно использовать в файле службы для настройки среды службы. Значения по умолчанию, предоставляемые systemd
, очень минимальны, поэтому вы должны явно инициализировать то, что нужно вашему сервису (, что обычно является хорошей практикой ).
Например, вы можете просто добавить
EnvironmentFile=/etc/environment
в определение службы.
Но если вашей службе нужно запустить только несколько других вещей, может быть более надежной -безопасностью, чтобы явно указать их как абсолютные пути в каком-либо файле конфигурации, вместо того, чтобы полагаться на PATH
, который может быть изменен для причинам, не связанным с вашим сервисом, что может привести к неприятным сюрпризам.