我是 shell 脚本的新手。我正在编写一个启动脚本,该脚本接受一个参数并根据该参数值启动一个进程。
示例:我想使用这样的启动脚本启动位于某个目录内的 groovyConsole。
sh Starter.sh groovy
脚本中的逻辑如下
if [ $1 = "groovy" ]
then
cd Works/Groovy/groovy-1.8.6/bin
./groovyConsole
fi
这确实启动了进程,但我发现该进程与终端窗口绑定。如果我关闭终端窗口,进程将被终止(显然)。所以我想知道是否有一种方法,运行上述命令将执行脚本并启动进程,但关闭终端窗口?
答案1
您可以使用以下方式将其从当前进程中分离出来nohup
和&
如果[$1 =“groovy”] 然后 cd Works/Groovy/groovy-1.8.6/bin nohup./groovyConsole& 复制代码 菲
这会使命令 groovyConsole 一直运行,直到您将其终止。但这不会关闭终端窗口,但您可以这样做...
sh Starter.sh groovy && exit
答案2
我不是专家,但是这应该如何运作。
if [ $1 = "groovy" ]
then
Works/Groovy/groovy-1.8.6/bin/groovyConsole &
exit
fi
解释:
- 不需要CD,直接用绝对路径运行就可以。
&
在后台启动应用程序- exit 退出终端
答案3
尝试将 ./groovyConsole 更改为 ./groovyConsole & 并在行后添加 exit
答案4
为了使 shell 脚本关闭其父进程,它必须明确地终止它。它也是一个这样做非常不好(因为以后您可能会在非预期的环境中运行此脚本),但如果您真的愿意,您可以尝试:
#!/bin/sh
if [ $1 = "groovy" ]
then
cd Works/Groovy/groovy-1.8.6/bin
nohup ./groovyConsole &
kill $PPID
fi