我正在回显登录时的各种机器统计信息,但这对于 SCP 和 SFTP 来说是有问题的,是否有我可以测试的 shell 变量?
答案1
在 bash 中,我用shopt -q login_shell
它来测试这一点。例如在 .bashrc 中:
if shopt -q login_shell
then
echo "interesting stuff"
fi
这应该会使“有趣的东西”远离你的 scp/sftp。
答案2
根据手册页,您应该测试是否存在“i” $-
。
如果 bash 是交互式的,则设置 PS1 并且 $- 包含 i,从而允许 shell 脚本或启动文件测试此状态。
例如:
if [[ $- == *i* ]]
then
# do interactive stuff
fi
答案3
从历史上看,在干净配置的 Bourne 风格 shell 中,它是“测试 PS1 是否设置”,但如果某些 joker 将 PS1 导出到环境中,则它会被破坏。
符合 SUS 标准的方法是测试 'i' 是否在 $- 中,正如 Dennis 指出的那样,尽管 [[ ... ]] 是非标准的,== 比较器也是如此。因此,最符合标准的检查是:
case $- in
*i*) # do interactive stuff
;;
esac
然后你有了shopt -q login_shell
bash(根据 Cakemox),以及[[ -o interactive ]]
zsh[[ -o login ]]
的和。