评论

评论

我正在尝试使用 sudo 从另一个脚本 bash 启动脚本 bash。

这是我的第一个脚本 测试文件

#!/bin/bash
echo "test.sh" $1 $2 $3  >>/home/pi/test.log
sudo ./temp.sh "$1" "$2" "$3" >>/home/pi/test.log &
echo "test.sh done!" >>/home/pi/test.log

当我跑步时

./test.sh a b c

在我的控制台中,它可以正常工作。第二个脚本使用 args 启动!但是当从其他工具(Deluge Execute 插件)启动第一个脚本时,第二个脚本永远不会启动。这看起来像是权限问题。

更新 : 我将第二个脚本重命名为临时文件并在第二个文件中产生回声

#!/bin/bash
torrentid=$1
torrentname=$2
torrentpath=$3

echo " Details: " $torrentid $torrentpath $torrentname >> /home/pi/temp.log

通过命令行启动时它可以工作,但通过 Deluge 启动时则不行。

更新2: 第二个脚本是使用 & 在第二个 shell/env 中自愿启动的​​,因为它会执行一个长时间的操作。我这样做是因为当通过 deluge 插件启动并执行脚本时,deluge 在执行期间会冻结。所以我需要一个在后台启动第二个脚本的脚本。

更新3: 我的用户 pi 已经pi ALL=(ALL) NOPASSWD: ALL在 visudo 文件中

答案1

尝试这个:

#!/bin/bash
cd "$(dirname "$0")"
# rest of script goes here
# ...

答案2

您的 BASH 代码有两个问题:

  1. 您使用需要身份验证的 sudo,这是 Deluge Execute 可能无法做到的(我不了解 Deluge。)
  2. 您使用 & 明确地在具有其自己的环境的子 shell 中启动您的命令。

要修复 1.,您有两个选择。您可以让 Deluge 用户成为 sudoer 并将密码回显到 sudo 中,就像这样,echo $PASSWORD | sudo -S <command>或者您可以在 sudoers 文件中创建适当的规则,以允许 Deluge 用户无需身份验证即可运行此命令。阅读 sudo 手册页了解更多信息。

要修复 2,只需删除“&”符号并考虑使用内置命令source。阅读 BASH 手册页以获取更多信息。

答案3

一个明确的问题是

sudo ./sort.sh "$1" "$2" "$3" & >>/home/pi/test.log

是你试图重定向输出使脚本在后台运行。请注意,它&也充当命令分隔符,因此您实际上是在执行以下内容命令:

sudo ./sort.sh "$1" "$2" "$3" &
>>/home/pi/test.log

你需要修复命令两者之一。说:

sudo ./sort.sh "$1" "$2" "$3" >>/home/pi/test.log &

另一个问题是您为第二个脚本指定了相对路径。请将./temp.sh脚本中的路径替换为绝对路径,或在其前面加上包含脚本的目录

"$(dirname "$0")"/temp.sh

答案4

尝试一下这个修改过的脚本
。Test.sh

#!/bin/bash
cd "$(dirname "$0")"
echo "test.sh $1 $2 $3"  >>/home/pi/test.log
gksu bash ./temp.sh "$1" "$2" "$3" >> /home/pi/test.log &
echo "test.sh done!" >>/home/pi/test.log

临时文件

#!/bin/bash
torrentid="$1"
torrentname="$2"
torrentpath="$3"

echo "Details:  $torrentid $torrentpath $torrentname" >> /home/pi/temp.log

如果gksu不可用,请使用pkexec

评论

gksu是 的图形前端sudo。只需尝试sudo gedit一下 gksu gedit。Sudo 已从较新版本的 Ubuntu 中删除。您尝试过该脚本吗?怎么样?

2

尝试 1:sleep 15在第一个脚本 test.sh 的末尾添加。
尝试 2:nohup在 gksu 之前添加。即nohup gksu bash ...

相关内容