我有一个脚本,它可以启动多个 C++ 程序的执行。我必须使用 sudo 来执行这些程序,因为它们使用了一些“受限制的”Linux 库/文件(可能不是正确的命名法,但您明白我的意思)。现在我想编写一个 shell 脚本来依次调用这些二进制文件,但我不知道如何执行此操作:
#!/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 权限,这将导致大问题...
答案1
您可以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
然后。
答案2
您可以使用suid
具有特权的程序root
(无需每次都输入密码):
通常,当程序在 Linux 下运行时,它会继承运行它的用户的权限,因此如果我在我的帐户下运行程序,该程序将以与我本人相同的权限运行。因此,如果我无法打开某个文件,我正在运行的程序也无法打开该文件。
如果我为某个文件设置了 SUID 或 SGID 位,这将导致运行该文件的任何人或进程都可以访问系统资源,就好像他们是该文件的所有者一样阅读更多...
因此您可以轻松更改脚本文件的所有权:
chown root:user <script file>
输入你的用户名而不是user
。然后像这样更改脚本文件的权限:
chmod g+s <script file>
答案3
为了避免输入 sudo 密码两次或更多次,您可以使用 subshell 和 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