Brocade FabricOS 8.2.2d:通过 SSH 出现“rbash:setcontext:未找到命令”

Brocade FabricOS 8.2.2d:通过 SSH 出现“rbash:setcontext:未找到命令”

语境:

我正在编写一个脚本,监控 Brocade SAN 交换机上的所有 SFP,并需要遍历所有 FabricID 上下文。

当我通过 SSH 登录 FabricOS 8.2.2d(也带有 9.0.1)设备时输入:

setcontext <FID>

那么命令就会正常运行。

但是当(作为我的脚本的一部分)我尝试通过以下方式非交互地运行相同的命令时:

ssh <username@hostname> setcontext <FID>

然后我收到以下错误信息:

rbash: setcontext: command not found

让我感到困惑的是,其他命令(例如showsfpswitchshow(我打算在之后运行setcontext))在两种情况下都有效。我不明白setcontext这有什么特别之处,导致无法以非交互方式运行。

编辑:使用command -V(的更多发现https://man.cx/command):

command -V sfpshow
sfpshow is hashed (/fabos/link_bin/sfpshow)

command -V setcontext
setcontext is a shell builtin

这可以解释为什么我可以运行前一个命令但不能运行后一个命令ssh吗?

答案1

来自 ssh 手册:

如果指定了命令,它将在远程主机上执行,而不是在登录 shell 上执行。

登录 shell 将读取一些配置文件,这些文件通常会设置类似的变量$PATH,因此当没有调用登录 shell 时,您通常会得到不同的环境。

rbash表示这台机器上正在运行一个受限的 bash,因此-l调用登录 shell 的 bash 参数应该起作用。

ssh <username@hostname> bash -l setcontext <FID>

另一个选择可能是使用完整路径setcontext,因为它很可能$PATH是缺少的变量。

相关内容