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