我正在尝试使用 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 代码有两个问题:
- 您使用需要身份验证的 sudo,这是 Deluge Execute 可能无法做到的(我不了解 Deluge。)
- 您使用 & 明确地在具有其自己的环境的子 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 ...