测试登录是否为 scp 连接

测试登录是否为 scp 连接

我正在回显登录时的各种机器统计信息,但这对于 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_shellbash(根据 Cakemox),以及[[ -o interactive ]]zsh[[ -o login ]]的和。

相关内容