Bash检查Shell在Linux/Unix Oses下是否是交互式的

时间:2020-01-09 10:42:05  来源:igfitidea点击:

在编写Shell脚本时,如何在GNU/Bash中检查Shell是否以交互模式运行?
当bash shell从用户终端读取和写入数据时,它被视为交互式shell。
大多数启动脚本都会检查称为PS1的shell变量。
通常,PS1是在交互式shell中设置的,而在非交互式shell中则未设置。

找出此shell是否使用PS1进行交互

语法如下:

// Is this Shell Interactive?
[ -z "$PS1" ] && echo "Noop" || echo "Yes"

这是我们的另一个捷径:

[ -z "$PS1" ] && echo "This shell is not interactive" || echo "This shell is interactive"
## do some stuff or die ##
[ -z "$PS1" ] && die "This script is not designed to run from $SHELL" 1 ||  do_interacive_shell_stuff

您可以使用bash shell if..else..fi语法,如下所示:

if [ -z "$PS1" ]; then
       die "This script is not designed to run from $SHELL" 1
else
       //call our function
       do_interacive_shell_stuff
fi

这个shell是交互式的吗?

要在启动脚本中确定Bash是否正在交互运行,请测试-special参数的值。
当shell为交互式时,它包含i。
例如:

因此,我们可以使用case..in..esac(bash case语句)

case "$-" in
*i*)	echo This shell is interactive ;;
*)	echo This shell is not interactive ;;
esac

或者我们可以使用if命令:

if [[ $- == *i* ]]
then
    echo "I will do interactive stuff here."
else 
    echo "I will do non-interactive stuff here or simply exit with an error."
fi

使用tty命令检查bash是否以交互模式运行shell程序

您还可以按以下方式使用" tty命令":

tty -s && echo "This shell is interactive" || echo "This shell is not interactive" ;;
##OR ##
ssh [email protected] tty -s && echo "This shell is interactive" || echo "This shell is not interactive" ;;

使用test命令

根据注释,我们也可以使用test命令:

-t FD file descriptor FD is opened on a terminal

因此,我们可以使用以下代码片段:

if [ -t 0 ] ; then
    echo "Doing interactive stuff here in my bash script ..."
else
    echo "Error ..."
fi