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?什么是$-应该代表什么?
如果您通过 运行单个命令(pwd在您的情况下)ssh,它不是交互式 shell,因此在我看来,这种行为是正确的。
你应该设置你的PATHin~/.profile或~/.bash_profile,而不是 in ~/.bashrc。
如bash(1)手册页所示:
参数
(……)
特殊参数
shell 对几个参数进行了特殊处理。这些参数可能
仅供参考;不允许分配给他们。
(……)
- 扩展到调用时指定的当前选项标志-
通过 set 内置命令或由 shell 设置的那些
本身(例如 -i 选项)。
所以i包含在$-意味着该-i选项已被使用(或由 shell 自动设置,是交互式的)。