Это будет хорошо работать; в более общем плане, grep
будет ожидать, когда программа не производит, и продолжайте читать, поскольку вывод входит, поэтому если Вы делаете:
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
Ничего не произойдет в течение 5 секунд, затем grep произведет подобранный "тест", и затем пять секунд спустя он выйдет, когда переданный по каналу процесс сделает
newgrp
запускает подоболочку с группы, которую Вы указали. Так, чтобы строка в Вашем сценарии не заканчивалась, пока та подоболочка не сделана.
Обработка newgrp
также отличается, если Вы используете bash
или ksh
. ksh
реализации это как встроенная команда, которая эквивалентна exec /usr/bin/newgrp [group]
. Так, как exec
, newgrp
никогда возвраты. (См. некоторую документацию здесь.)
Если Вы хотите, чтобы это возвратило, и хотело выполнить команды в той подоболочке с измененными идентификационными данными группы, можно использовать перенаправление.
Например:
#!/bin/ksh
echo "Before newgrp"
/usr/bin/newgrp users <<EONG
echo "hello from within newgrp"
id
EONG
echo "After newgrp"
Уведомление: /usr/bin/newgrp
назван явно для предотвращения неявного exec
от ksh
. Последняя команда в том сценарии будет работать в исходной оболочке с исходными идентификационными данными группы.
После того как процесс был запущен, он не может получить дополнительные полномочия. Таким образом, Вы не можете получить состав группы посреди сценария. Можно запустить целый скрипт с дополнительным составом группы:
newgrp test_grp1
/path/to/script
Вы не можете изменить свой реальный GID середина сценария. Если Вы действительно нуждаетесь в этом, переключаетесь на язык, где Вы можете, такие как Perl. Редко должно изменить Ваш реальный GID, хотя, так как это не имеет значения очень. Обычно достаточно выполнить случайный вызов к chgrp
(создайте файлы без полномочий группы сначала, затем работайте chgrp
, затем добавьте полномочия группы; при создании файлов с полномочиями группы существует состояние состязания: пользователь, который находится в первой группе, мог открыть файл, прежде чем у Вас будет время для выполнения chgrp
).
newgrp
на его стандартном входе, как в ответе Mat.
– Gilles 'SO- stop being evil'
17.08.2011, 15:35