我想将命令绑定到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 运行的操作系统,而是检查我的终端运行的操作系统。有没有办法获取该信息?
请不要关注绑定中使用的密钥的详细信息。在这一点上,这是不相关的:)
编辑: 为了让事情更清楚:
答案 0 :(得分:2)
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
)或全局(Linux上最有可能/etc/ssh/ssh_config
,Mac上为/etc/ssh_config
):< / p>
SendEnv CLIENT_OSTYPE
它可能已在全局配置中设置为某个值(在我的情况下为LANG LC_*
),在这种情况下只需添加到列表中:
SendEnv LANG LC_* CLIENT_OSTYPE
最后,您必须配置SSH服务器以实际接受此环境变量。这可以通过修改/etc/ssh/sshd_config
在Linux上/etc/sshd_config
和Mac上AcceptEnv
完成:
AcceptEnv CLIENT_OSTYPE
与SendEnv
类似,这也可能已设置为:
AcceptEnv LANG LC_* CLIENT_OSTYPE
然后,您可以使用CLIENT_OSTYPE
的值来决定要使用的配置。
答案 1 :(得分:-1)
我认为shell命令arch
可能会帮助你。
它还会告诉您是使用32位还是64位MacOS计算机。