我正在尝试自动运行多个任务,但我需要将它们作为 sudo 运行。
我想在单独的终端中运行它们,这样我就可以看到每个终端的输出。
这是我设置的一个最小示例(因为我想做的更复杂)
设置两个文件 - 请注意,数据只能以 root 身份读取,并且包含 3 行示例文本:
-rw------- 1 root root 33 Nov 15 09:29 data
-rwxrwxrwx 1 root root 11 Nov 15 09:30 test.sh*
test.sh 看起来像:
#!/bin/bash
cat data
read -p "Press enter to continue"
此外,我在 bash 启动中设置了名为“SESSION_MANAGER”的用户级变量……这似乎会导致一些问题(参见后面的示例)
所以现在我想生成运行这个脚本的各种终端。我尝试了以下方法:
尝试 1
xfce4-terminal -e './test.sh'
输出:
cat: data: Permission denied
Press enter to continue
尝试 2 - 在开始时使用 sudo
~/src/sandbox$ sudo xfce4-terminal -e './test.sh'
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined
(xfce4-terminal:6755): IBUS-WARNING **: The owner of /home/openbts/.config/ibus/bus is not root!
输出:
this is some data
more data
end
Press enter to continue
在这里你可以看到数据文件的输出是可以打印的,但是我对 session 管理器变量有一些问题。
尝试 3 - 在命令 中使用 sudo
~/src/sandbox$ xfce4-terminal -e 'sudo ./test.sh'
输出:
[sudo] openbts 的密码:
这是一些数据
更多数据
结尾
按回车继续
在这里你可以看到一切都很好......但我不得不再次输入我的密码,这有点扼杀了我的自动化:(
尝试 4 - 以 root 身份启动
~/src/sandbox$ sudo su
root@openbts:/home/openbts/src/sandbox# xfce4-terminal -e './test.sh'
Failed to connect to session manager: Failed to connect to the session manager: SESSION_MANAGER environment variable not defined
输出:
this is some data
more data
end
Press enter to continue
在这里,输出再次看起来不错,但我有这个 SESSION_MANAGER 问题......而且新的 xfce4-terminal 出现了乱七八糟的字体/外观 - 我猜这是 root 用户设置。
问题
如何在新终端中运行多个 test.sh 实例,而不必输入密码(或完全交互)。我可以在流程开始时输入密码一次(在原始终端中)吗?
正如你所看到的,我在进入
sudo su
时得到了这种工作。 ,但这里的问题是 SESSION_MANAGER 变量 - 不确定这是否是一个问题,但它看起来非常凌乱,而且 xcfe4-terminal 看起来也很糟糕(我想我可以将根设置更改为与我的用户设置相同)。那么,以 root 身份运行时如何避免 SESSION_MANAGER 问题?
最佳答案
如果您在启动单独的终端之前更改用户 ID,您将看到 session 管理器问题。所以解决方案是在终端中运行 sudo。
您不想在 sudo 中输入密码。您可以通过添加来做到这一点
yourname ALL=(ALL) NOPASSWD: ALL
至
/etc/sudoers
(至少在 slackware 上)。您还可以尝试正确设置文件的权限,这样您就不需要一直 root。请注意,添加该行具有安全隐患;您可能只想允许
cat
没有密码(在您的示例中),或者为 sudo 制定更详细的规则。我给出的线只是一个例子。就个人而言,我会查看文件权限。
关于bash - 如何在没有进一步用户交互的情况下使用 sudo 在单独的终端中运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304416/