为什么我的新 cygwin .bashrc 交互式检查不起作用?

Luc*_*cas 3 bash ssh cygwin sshd

我刚刚更新了 Cygwin,新的.bashrc在顶部包含这一行:

echo "BEFORE TEST"
# If not running interactively, don't do anything
[[ "$-" != *i* ]] && return
echo "AFTER TEST"
Run Code Online (Sandbox Code Playgroud)

我明白如果不运行交互式,你不需要做任何事情,但我的问题是,如果我ssh使用命令:

ssh localhost pwd
Run Code Online (Sandbox Code Playgroud)

我看到这个:

BEFORE TEST
Run Code Online (Sandbox Code Playgroud)

所以,很明显,它没有通过[[ "$-" != *i* ]]测试并返回。显然ssh localhost pwd是一个微不足道的例子,但我希望.bashrc如果通过ssh. 我的实际自动化针对这个 cygwin 实例远程运行命令并且失败,因为路径(由 my 设置.bashrc)没有正确设置。

此外,任何人都可以解释该测试实际上在做什么吗?什么是i?什么是$-应该代表什么?

enz*_*tib 7

如果您通过 运行单个命令(pwd在您的情况下)ssh,它不是交互式 shell,因此在我看来,这种行为是正确的。

你应该设置你的PATHin~/.profile~/.bash_profile,而不是 in ~/.bashrc

bash(1)手册页所示:

   参数
      (……)
      特殊参数
          shell 对几个参数进行了特殊处理。这些参数可能
          仅供参考;不允许分配给他们。
          (……)
          - 扩展到调用时指定的当前选项标志-
                 通过 set 内置命令或由 shell 设置的那些
                 本身(例如 -i 选项)。

所以i包含在$-意味着该-i选项已被使用(或由 shell 自动设置,是交互式的)。