Bash脚本多个命令问题

时间:2016-06-22 08:56:42

标签: linux bash xterm

我正在开发一个程序,只要它注册该程序尚未打开,就需要自动启动程序。它需要超级用户权限才能启动。 目前,我有一个有效的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确实有效,所以我不明白为什么它找不到文件或目录

有什么建议吗?

1 个答案:

答案 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