我正在开发一个程序,只要它注册该程序尚未打开,就需要自动启动程序。它需要超级用户权限才能启动。 目前,我有一个有效的Bash脚本,如下所示:
#!/bin/bash
while true; do #Continue indefinitely
if [ $(ps aux | grep '/odroid_detection' | grep -v '<defunct>' -c) -le 4 ]; then #if less than 3 odroid_servers are active (booter opens 3 processes)
xterm -iconic -e su -c "xterm -iconic -hold /home/odroid/Documents/SUNRISE-Odroid/_odroid_detection/_odroid_detection/bin/Debug/_odroid_detection"
fi
sleep 60 #check every minute
done
然而,执行的程序并不完全按计划工作,因为它是从根映射而不是它所在的映射执行的。因此我想cd到可执行文件所在的映射(〜/ Documents / SUNRISE) -Odroid / _odroid_detection / _odroid_detection / bin / Debug)但具有与上述相同的功能。这就是我想出的:
#!/bin/bash
while true; do #Continue indefinitely
if [ $(ps aux | grep '/odroid_detection' | grep -v '<defunct>' -c) -le 4 ]; then #if less than 3 odroid_servers are active (booter opens 3 processes)
xterm -iconic -e "cd ../_odroid_detection/_odroid_detection/bin/Debug/ && su -c "xterm -iconic -hold -e _odroid_detection""
fi
sleep 60 #check every minute
done
然而,这不起作用,我尝试了许多替代方案,但我似乎无法使其工作..它在终端中出现以下错误:
xterm: Can't execvp cd ../_odroid_detection/_odroid_detection/bin/Debug && su -c xterm: No such file or directory
发出此错误的xterm在地图〜/ Documents / SUNRISE-Odroid / Bash中打开,并且当我单独执行它时执行上面提到的cd确实有效,所以我不明白为什么它找不到文件或目录
有什么建议吗?
答案 0 :(得分:0)
StackOverflow的着色让我理解了我犯的一个错误:'su -c'之后的起始引用被解释为xterm执行行的结束引用。工作代码如下:
#!/bin/bash
while true; do #Continue indefinitely
if [ $(ps aux | grep '/odroid_detection' | grep -v '<defunct>' -c) -le 2 ]; then #if less than 3 odroid_servers are active (booter opens 3 processes)
xterm -iconic -e "cd ../_odroid_detection/_odroid_detection/bin/Debug/ && su -c ./_odroid_detection"
fi
sleep 60 #check every minute
done