如何确定给定的ksh调用是否运行交互式shell?
我在一个ENV
文件中有一些命令,我希望在非交互式ksh调用(例如执行shell脚本时)中跳过它们。
if [[ $- = *i* ]]; then
# do interactive stuff
fi
除非确定该 shell 是交互式的并使用这个神秘的咒语,否则不要甚至引用.kshrc
。
ENVIRON=$HOME/.kshrc export ENVIRON
ENV='${ENVIRON[(_$-=1)+(_=0)-(_$-!=_${-%%*i*})]}' export ENV
test -t 0
是用于测试stdin
是否为终端的命令。这与shell是否交互不同。例如,您可以运行一个从tty读取的shell脚本。 - Mikhail T.~/.kshrc
,@grawity。当ksh和bash作为交互式shell时,它们只读取各自的~/.foorc
文件。在那里检查它是没有必要的。但如果你确实要检查,最好检查得正确... - Mikhail T.