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