我想将命令绑定(bind)到 zsh 中的组合键,这在 OSX 和 Linux 上是不同的。我现在的状态是
if [[ "$(uname)" == "Darwin" ]]; then
bindkey "^e" some-command # Ctrl+E for OSX
else
bindkey "^[e" some-command # Alt+E for Linux
fi
但是,这不适用于这两个系统之间的 ssh 连接。所以实际上,我不想检查我的 shell 在哪个操作系统中运行,而是在哪个操作系统中运行我的 terminal 。有没有办法获取该信息?
请不要关注绑定(bind)中使用的键的细节。这在这一点上不相关:)
编辑: 为了使事情更清楚:
最佳答案
ssh
可以将环境变量发送到服务器,默认情况下会为少数变量执行此操作。尽管有关客户端操作系统的任何信息都不是该默认列表的一部分,但可以对其进行扩展。
您需要设置并导出具有所需信息的变量。你可以使用
uname
的输出,或者你可以只复制OSTYPE
(你不应该直接使用OSTYPE
,因为改变它可能不是一个好主意)。因此,您在两个系统的~/.zshrc
中都需要这样的东西(当然,在您需要它之前就在上面的某个地方):export CLIENT_OSTYPE=${CLIENT_OSTYPE:-$OSTYPE}
如果之前未设置,这会将
CLIENT_OSTYPE
设置为OSTYPE
的值。因此,如果您在本地登录,它将设置为OSTYPE
。但是,如果您使用ssh
登录,它将被设置为传递的CLIENT_OSTYPE
。现在您必须将 SSH 客户端设置为实际将
CLIENT_OSTYPE
传递给服务器。为此,您需要编辑SendEnv
条目 ssh 客户端配置 - 用户特定(~/.ssh/config
)或全局(最有可能是/etc/ssh/ssh_config
在 Linux 上,/etc/ssh_config
在 Mac 上):SendEnv CLIENT_OSTYPE
它可能已经在全局配置中设置为某个值(在我的例子中是
LANG LC_*
),在这种情况下只需添加到列表中:SendEnv LANG LC_* CLIENT_OSTYPE
最后,您必须配置 SSH 服务器以实际接受此环境变量。这可以在 Linux 上的
/etc/ssh/sshd_config
和 Mac 上的/etc/sshd_config
中通过修改AcceptEnv
来完成:AcceptEnv CLIENT_OSTYPE
类似于
SendEnv
这也可能已经被设置为一些东西:AcceptEnv LANG LC_* CLIENT_OSTYPE
然后您可以使用 CLIENT_OSTYPE
的值来决定要使用的配置。
关于linux - 我的终端在哪个操作系统中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946510/