Chapter 36. Miscellany. Comtrol DeviceMaster Software Development Kit
Reklāma
Reklāma
Chapter 36. Miscellany
Nobody really knows what the Bourne shell's grammar is. Even examination of the source code is little help.
--Tom Duff
36.1. Interactive and non-interactive shells and scripts
An interactive shell reads commands from user input on a
tty
. Among other things, such a shell reads startup files on activation, displays a prompt, and enables job control by default. The user can interact with the shell.
A shell running a script is always a non-interactive shell. All the same, the script can still access its
tty
. It is even possible to emulate an interactive shell in a script.
#!/bin/bash
MY_PROMPT='$ ' while : do
echo -n "$MY_PROMPT"
read line
eval "$line"
done exit 0
# This example script, and much of the above explanation supplied by
# Stéphane Chazelas (thanks again).
bound to a tty, a script that a user has invoked from the console or an xterm.
Init and startup scripts are necessarily non-interactive, since they must run without human intervention. Many administrative and system maintenance scripts are likewise non-interactive. Unvarying repetitive tasks cry out for automation by non-interactive scripts.
Non-interactive scripts can run in the background, but interactive ones hang, waiting for input that never
comes. Handle that difficulty by having an expect script or embedded here document feed input to an
interactive script running as a background job. In the simplest case, redirect a file to supply input to a read statement (read variable <file). These particular workarounds make possible general purpose scripts that run in either interactive or non-interactive modes.
If a script needs to test whether it is running in an interactive shell, it is simply a matter of finding whether the
prompt.) if [ -z $PS1 ] # no prompt?
### if [ -v PS1 ] # On Bash 4.2+ ...
then
# non-interactive
...
Chapter 36. Miscellany 502
Lejupielādēt
Reklāma