Maricruzz
Maricruzz

Reputation: 405

Start background process from shellscript then bring back to foreground later

I'm trying to make a shell script that does the following:

So far I have:

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

However, I don't know how to move x back to the foreground. This is all called from a shell script so I don't know the job number of x to move to the foreground.

Note: everything has to be automated, no user interaction with the shell script should be needed.

Any suggestions are welcome :)

Upvotes: 7

Views: 4400

Answers (2)

clt60
clt60

Reputation: 63902

Although absolutely don't understand why someone may need such script, and I'm sure than exists more elegant and more better/correct solution - but ok - the next demostrating how:

The script what going to background (named as 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"

the main script (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

run the ./main.sh - and the result will be something like

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

Upvotes: 6

Amit
Amit

Reputation: 20456

You can use fg to bring the last background process to foreground

Upvotes: 1

Related Questions