我正在尝试让一个简单的 bash 脚本在单击时运行。它可以从 cli 完美运行,但启动motion
时无法启动。我已经为 nopasswd 设置了 sudoers 脚本,它可以正确启动,并且在从 cli 运行时不会要求输入密码。从 cli 运行时它也可以正确关闭所有内容,但当我双击文件并告诉它运行时,sudo
几乎就像跳过了行一样。sudo
这是我的脚本:
#!/bin/bash
check_process() {
[ "$1" = "" ] && return 0
[ `pgrep -n $1` ] && return 1 || return 0
}
check_process "motion"
if [ $? -eq 0 ]
then
sudo /etc/init.d/motion start
firefox http://localhost:8081/ > /dev/null &
else
sudo /etc/init.d/motion stop
killall firefox > /dev/null &
fi
答案1
在 Nautilus 中,双击脚本时有两个选项可以运行该脚本:
1. 在终端中运行
- 使用此选项,您的脚本将正确运行(正如您所说的)。
2. 运行
使用此选项时,您必须使用
pkexec
(或者,gksu
如果您已安装)而不是sudo
。这是因为您无法运行sudo
不使用 X 终端仿真器的图形命令,即使您设置sudo
为不要求输入密码。因此,在这种情况下,您的脚本应该是这样的:
#!/bin/bash check_process() { [ "$1" = "" ] && return 0 [ `pgrep -n $1` ] && return 1 || return 0 } check_process "motion" if [ $? -eq 0 ] then pkexec /etc/init.d/motion start firefox http://localhost:8081/ > /dev/null & else pkexec /etc/init.d/motion stop killall firefox > /dev/null & fi