我有一个 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!