我编写了以下脚本,用于启动守护进程并显示Zenity窗口,然后在关闭窗口时停止守护进程:
#!/usr/bin/fish
if not ps aux | grep [s]erviio > /dev/null
set -x JAVA "/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java"
~/Programs/serviio/bin/serviio.sh &
zenity --info --text="Serviio is running.\nClick OK to stop." --title="Serviio"
~/Programs/serviio/bin/serviio.sh -stop
end
如果我从终端运行脚本,它就能正常工作。它还工作在bash终端,这似乎表明,她的工作,如预期。
但是,如果我创建一个启动程序来指向脚本并尝试运行它,则不会发生任何事情。Serviio没有启动(我可以从ps aux
中确认这一点),也没有显示Zenity窗口。
我试着找出这个脚本是什么导致了一个问题,但没有取得任何成功。
换句话说,我无法识别脚本中阻止它运行的任何单个元素。
有什么问题吗?
发布于 2016-04-11 18:44:09
通过将ps
命令的输出重定向到一个文件,我找到了原因。如果我从启动程序中运行脚本,grep就会找到脚本本身(它的名称中包含"serviio“),因此它不会在" If”中执行代码。
我通过使grep寻找更具体的内容来修正它。
主要原因似乎是,如果脚本直接从终端运行,它不会显示为进程,但如果它是从启动程序运行的,则解释器(在本例中为fish)将以脚本作为参数出现。
https://unix.stackexchange.com/questions/275306
复制相似问题