使用“sudo”的 Bash 脚本从 CLI 正确运行,但单击运行则不行

使用“sudo”的 Bash 脚本从 CLI 正确运行,但单击运行则不行

我正在尝试让一个简单的 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 中,双击脚本时有两个选项可以运行该脚本:

从 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
    

相关内容