foreground - execute a sequence of commands

FOREGROUND(1) BSD General Commands Manual FOREGROUND(1)


foreground — execute a sequence of commands


In an execlineb(1) script:

foreground { prog1... } prog2...


foreground reads prog1 in a block (

cf. execline-block(7) ). It forks and executes it, then waits for it to complete.

foreground sets the ? environment variable to the exit code of prog1. If prog1... was killed by a signal, the ? value is 256 plus the signal number.

foreground then exec(3)s into prog2....

foreground is the basic sequence operator: it takes two commands and executes them one by one. execline scripts require it to wrap external commands that exit instead of natively supporting the “perform some action, then execute some other program” model.

‘foreground prog1... "" prog2...’ is equivalent to ‘sh -c ’Ar prog1...; exec prog2...’’.

256 and above are not valid exit codes for commands, so when the ? environment variable contains 256 or more, it means that the previous command was killed by a signal. There is no ambiguity here, and ? reports exactly what happened to the previous command; foreground does not exit, so there is no need for exit code approximation (

cf. execline-exitcodes(7) ).


background(1), backtick(1), execlineb(1), if(1), ifelse(1), ifte(1), ifthenelse(1), pipeline(1), runblock(1), exec(3), execline-block(7), execline-exitcodes(7)

This man page is ported from the authoritative documentation at:


Laurent Bercot
Alexis <

[email protected] > (man page port)

BSD February 14, 2021 BSD

Updated 2023-02-15 - |