На этот вопрос уже есть ответ здесь:
У меня есть сценарий, который запускает выполнение нескольких программ на C ++. Я должен выполнить их с помощью sudo, поскольку они используют некоторые "ограниченные" библиотеки linux / файлы (вероятно, неправильная номенклатура, но вы понимаете, что я имею в виду). Теперь я хотел бы написать сценарий оболочки, который вызывает эти двоичные файлы один за другим, но я не знаю, как это сделать:
#!/bin/bash
./main a > out/output2DFloat.csv
./main a a > out/output3DFloat.csv
./main a a a > out/output2DDouble.csv
./main a a a a > out/output3DDouble.csv
и вызвать это с помощью sudo? Или добавьте Sudo перед каждым и вызовите его с помощью sudo ...
Я опасаюсь, что таймер sudo закончится еще до того, как будет завершен хотя бы один, что приведет к большим проблемам, если следующие затем потребуются sudo-rights ...
Вы могли просто записать sudo
перед каждой командой, для которой нужны sudo права. Если "sudo таймер закончится", то Вам предложат снова. Это было бы похоже
#!/bin/bash
sudo ./main a > out/output2DFloat.csv
sudo ./main a a > out/output3DFloat.csv
sudo ./main a a a > out/output2DDouble.csv
sudo ./main a a a a > out/output3DDouble.csv
затем.
Можно использовать suid
запускать Вашу программу с root
полномочия (никакая потребность ввести пароль каждый раз):
Обычно, когда прогоны программы в соответствии с Linux, это наследовало полномочия пользователя, который выполняет его, таким образом если бы я запускаю программу в соответствии со своей учетной записью, прогонами программы с теми же полномочиями, которые я имел бы, если бы та программа была я. Таким образом, если я не могу открыть определенный файл, программа, которую я запускаю также, не может открыть рассматриваемый файл.
Если я установил SUID, или SGID укусил для файла, это вызывает любых людей или процессы, которые петляют, чтобы иметь доступ к системным ресурсам, как будто они - владелец чтения файла больше...
Таким образом, можно легко изменить владение файла сценария:
chown root:user <script file>
Поместите свое имя пользователя вместо user
. Затем измените разрешение файла сценария как это:
chmod g+s <script file>
Для не ввода sudo пароля дважды или больше можно использовать подоболочку и heredoc, как это:
#!/bin/bash
sudo /bin/bash <<EOF
./main a > out/output2DFloat.csv
./main a a > out/output3DFloat.csv
./main a a a > out/output2DDouble.csv
./main a a a a > out/output3DDouble.csv
EOF