Библиотека сайта rus-linux.net
33.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.
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). |
Let us consider an interactive script to be one that requires input from the user, usually with read statements (see Example 14-3). "Real life" is actually a bit messier than that. For now, assume an interactive script is 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 [ -z $PS1 ] # no prompt? then # non-interactive ... else # interactive ... fi |
case $- in *i*) # interactive shell ;; *) # non-interactive shell ;; # (Courtesy of "UNIX F.A.Q.," 1993) |
Scripts may be forced to run in interactive
mode with the -i option or with a
|