2014-03-02 76 views
2

我试图做一个shell脚本,执行以下操作:启动后台进程从shell脚本,然后带回前台后

  • 开始的节目x
  • 在X运行执行一些命令,例如:

    echo "blabla" >> ~/blabla.txt 
    
  • 那些命令程序x的执行之后应在前台运行,因此,它可能需要用户输入。

到目前为止,我有:

~/x & 
echo "blabla" >> ~/blabla.txt 

不过,我不知道如何移动X回到前台。这一切都是从shell脚本中调用的,所以我不知道x的工作号码移到前台。

注意:一切都必须自动化,不需要用户与shell脚本交互。

任何建议,欢迎:)

+0

如果节目x是要求用户输入的,它应该在终端显示尽管上x在后台运行。 – Amit

回答

0

您可以使用fg,使最后的后台进程前景

1

虽然完全不明白为什么有人会需要这样的剧本,我敢肯定比存在更优雅,更更好的/正确的解决方案 - 但确定 - 下一个demostrating如何:

什么打算背景(命名为bgg)脚本

#!/bin/bash 
for i in $(seq 10) 
do 
    echo "bg: $i" 
    sleep 1 
done 
read -p 'BGG enter something:' -r data 
echo "$0 got: $data" 

主脚本(main.sh

set -m #this is important 

echo "Sending script bgg to background - will cycle 10 secs" 
./bgg & 2>/dev/null 

echo "Some commands" 
date 
read -r -p 'main.sh - enter something:' fgdata 
echo "Main.sh got: ==$fgdata==" 

jnum=$(jobs -l | grep " $! " | sed 's/\[\(.*\)\].*/\1/') 
echo "Backgroung job number: $jnum" 

echo "Now sleeping 3 sec" 
sleep 3 
echo "Bringing $jnum to foreground - wait until the BG job will read" 
fg $jnum 

运行的./main.sh - ,结果将会像

Sending bgg to background - will cycle 10 secs 
Some commands 
Mon Mar 3 00:04:57 CET 2014 
main.sh - enter something:bg: 1 
bg: 2 
bg: 3 
bg: 4 
bg: 5 
qqbg: 6 
qqqqq 
Main.sh got: ==qqqqqqq== 
Backgroung job number: 1 
Now sleeping 3 sec 
bg: 7 
bg: 8 
bg: 9 
Bringing 1 to foreground - wait until the BG job will read 
./bgg 
bg: 10 
BGG enter something:wwwwwww 
./bgg got: wwwwwww