为什么 `ssh user@server mycommand` 创建交互式 shell?

为什么 `ssh user@server mycommand` 创建交互式 shell?
$ ssh t@localhost [[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'
Interactive

我想知道为什么上面的 shell 是交互式的,因为它有非选项参数,并且没有-sor -cor -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

相关内容