确定给定的ksh调用是否正在运行交互式shell的首选方法是什么?
我在一个ENV文件中有一些命令,我想跳过非交互式ksh调用(例如,在执行shell脚本时).
我见过建议范围从:
if [[ $- = *i* ]]; then
# do interactive stuff
fi
Run Code Online (Sandbox Code Playgroud)
... .kshrc除非使用这个神秘的咒语确定壳是交互式的,否则甚至不采购:
ENVIRON=$HOME/.kshrc export ENVIRON
ENV='${ENVIRON[(_$-=1)+(_=0)-(_$-!=_${-%%*i*})]}' export ENV
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现检查 $- 变量的 'i' 标志是 ksh 中的最佳方法。
if [[ $- = *i* ]]; then
#do interactive stuff
fi
Run Code Online (Sandbox Code Playgroud)
在bash里面,经常会用到这两种方法~/.bashrc:
检查是否stdin是 tty:
[ -t 0 ] || return
Run Code Online (Sandbox Code Playgroud)
或者
if [ -t 0 ]; then
# do interactive stuff
fi
Run Code Online (Sandbox Code Playgroud)$PS1检查是否设置了提示( ):
[ -z "$PS1" ] || return
Run Code Online (Sandbox Code Playgroud)但我不知道如何在 ksh 中做到这一点。