2014-03-02 84 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