Bash 能否区分交互式 SSH 会话和内嵌 SSH 会话?

Bash 能否区分交互式 SSH 会话和内嵌 SSH 会话?

我有一个 Bash 脚本,需要从交互式提示符运行,因为环境变量和配置似乎只有在实际登录到会话时才会被读取。示例如下:

好的

me@client:~$ ssh box
user@box:~$ /usr/local/bin/myscript

坏的

me@client:~$ ssh box "/usr/local/bin/myscript"

我可以在脚本中使用任何 Bash-fu 来确定它是否通过单行 SSH 命令运行吗?

答案1

您可以只检查是否有终端连接到标准输入(这就是tty命令的作用)。将这些行添加到您的脚本中:

if ! tty >/dev/null; then
    echo "Must be run from a tty"
    exit 1
fi

除非正确运行,否则您的脚本现在将退出并出现错误:

$ ssh badabing ~/scripts/a.sh
Must be run from a tty

$ ssh badabing
terdon@badabing ~ $ ~/scripts/a.sh
Works!

相关内容