-exec
предикат, который выполняет команду (не оболочка) и оценивает к TRUE или FALSE на основе результата команды (нулевой или ненулевой статус выхода).
Так:
find . -iname '*.csv' -exec grep foo {} \; -print
распечатал бы путь к файлу если grep
находит нечто в файле. Вместо -print
можно использовать другого -exec
предикат или любой другой предикат
find . -iname '*.csv' -exec grep foo {} \; -exec echo {} \;
См. также !
и -o
найдите операторы для отрицания и или.
С другой стороны, можно запустить оболочку как:
find . -iname '*.csv' -exec sh -c '
grep foo "$1" && echo "$1"' sh {} \;
Или избегать необходимости запускать оболочку для каждого файла:
find . -iname '*.csv' -exec sh -c '
for i do
grep foo "$i" && echo "$i"
done' sh {} +
Можно добавить файл к системе /etc/profiile.d
каталог, который включает a if/then
оператор для каждого из пользователей, которых Вы хотите выполнить virtualenv
для.
Скажите, что я создаю файл как это, /etc/profile.d/me.sh
.
if [ "$USER" == "saml" ]; then
touch /tmp/samsfile
fi
Сделайте это исполняемым файлом:
$ chmod +x /etc/profile.d/me.sh
И затем вход в систему как saml
, использование su
:
$ su saml
Если мы проверяем, чтобы видеть, был ли временный файл создан, это было:
$ ls -l /tmp/samsfile
-rw-rw-r-- 1 saml saml 0 Oct 14 00:31 /tmp/samsfile
Если все, что Вы хотите сделать, определяют переменные среды, можно вставить их ~/.environment
в корневом каталоге пользователей. Можно вставить более сложные отрывки оболочки ~/.profile
.
Все учетные записи пользователей действительно имеют корневой каталог, даже если он не принадлежит им. В то время как у Вас могут быть учетные записи, корневой каталог которых не существует, нет большого количества точки к выполнению этого. Можно использовать единственный каталог, принадлежавший корню как корневой каталог этих пользователей, если Вам нравится.
Другая возможность выполнить команду во время входа в систему состояла бы в том, чтобы добавить pam_exec
к стеку PAM. Но остерегайтесь этого, это довольно хитро для использования правильно, потому что прогоны программы как исходный пользователь, или как корень, и не как целевой пользователь, и это работает в среде, выбранной исходным пользователем, таким образом, трудно заставить его защитить, если это работает как корень.