在后台运行当前的bash脚本

时间:2015-08-03 17:04:31

标签: bash

通常我添加“&”在背景中开始我的过程的角色,例如:

In [41]: df = pd.DataFrame([['123'],['ab 123'],['xyz']],columns = ['A'])

In [42]: df
Out[42]:
        A
0     123
1  ab 123
2     xyz

In [43]: df[df["A"].str.contains("\d+")]
Out[43]:
        A
0     123
1  ab 123

In [47]: df[df["A"].str.contains("\d+")]['A'].str.extract("(\d+)")
Out[47]:
0    123
1    123
Name: A, dtype: object

In [48]: df['A'].str.extract("(\d+)")
Out[48]:
0    123
1    123
2    NaN
Name: A, dtype: object

但是如果没有“&”我怎么能在背景中制作呢?性格?

user@pc:~$ my_script &

谢谢你们。

1 个答案:

答案 0 :(得分:2)

#!/bin/bash

if [[ "$1" != "--nodaemon" ]]; then
    ( "$0" --nodaemon "$@" </dev/null &>/dev/null & )
else
    shift
fi

#...rest of script

这样做是检查它的第一个参数是否是&#34; - nodaemon&#34;,如果是这样,那么在背景中使用参数&#34激活自己("$0") - -nodaemon&#34;,它阻止它试图在一种无限循环中重新背景。

请注意,将此作为脚本中的第一个内容将使始终在后台运行。如果它只需要在某些条件下进入后台(例如,当使用参数&#34; start&#34;)运行时,您必须相应地调整它。也许是这样的:

#!/bin/bash

start_server()
{   
    #my script here with infinite loop ...
}

if [[ "$1" = "start" ]]; then
    ( "$0" start-nodaemon </dev/null &>/dev/null & )
elif [[ "$1" = "start-nodaemon" ]]; then
    start_server
elif #.....