Проблема при выполнении “newgrp” управляет в сценарии

Это будет хорошо работать; в более общем плане, grep будет ожидать, когда программа не производит, и продолжайте читать, поскольку вывод входит, поэтому если Вы делаете:

$ (echo foo; sleep 5; echo test; sleep 5) | grep test

Ничего не произойдет в течение 5 секунд, затем grep произведет подобранный "тест", и затем пять секунд спустя он выйдет, когда переданный по каналу процесс сделает

8
17.08.2011, 13:20
2 ответа

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. Последняя команда в том сценарии будет работать в исходной оболочке с исходными идентификационными данными группы.

9
27.01.2020, 20:11

После того как процесс был запущен, он не может получить дополнительные полномочия. Таким образом, Вы не можете получить состав группы посреди сценария. Можно запустить целый скрипт с дополнительным составом группы:

newgrp test_grp1
/path/to/script

Вы не можете изменить свой реальный GID середина сценария. Если Вы действительно нуждаетесь в этом, переключаетесь на язык, где Вы можете, такие как Perl. Редко должно изменить Ваш реальный GID, хотя, так как это не имеет значения очень. Обычно достаточно выполнить случайный вызов к chgrp (создайте файлы без полномочий группы сначала, затем работайте chgrp, затем добавьте полномочия группы; при создании файлов с полномочиями группы существует состояние состязания: пользователь, который находится в первой группе, мог открыть файл, прежде чем у Вас будет время для выполнения chgrp).

2
27.01.2020, 20:11
  • 1
    Есть ли какая-либо причина, это не могло быть сделано путем обертывания второй половины сценария в подоболочке? –  Caleb 17.08.2011, 14:44
  • 2
    @Caleb Не подоболочка строго говоря, но можно передать сценарий оболочке, вызванной newgrp на его стандартном входе, как в ответе Mat. –  Gilles 'SO- stop being evil' 17.08.2011, 15:35

Теги

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