$ ssh t@localhost [[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'
Interactive
我想知道为什么上面的 shell 是交互式的,因为它有非选项参数,并且没有-s
or -c
or -i
。
来自 bash 手册:
交互式 shell 是一种在没有非选项参数的情况下启动的 shell,除非指定了 -s,但未指定 -c 选项,并且其输入和错误输出都连接到终端(由 isatty(3) 确定),或者以以下方式启动: -i 选项。
谢谢。
答案1
您没有执行您认为的测试。你的扩张$-
正在发生前命令ssh
被执行。展示:
$ set -x
$ ssh home echo $-
+ ssh home echo himxBHs
himxBHs
$ ssh home 'echo $-'
+ ssh home 'echo $-'
hBc