Linux 我的终端在哪个操作系统中运行?
我想将命令绑定到zsh中的键组合,这在OSX和Linux上是不同的。我现在的状态是Linux 我的终端在哪个操作系统中运行?,linux,macos,shell,terminal,zsh,Linux,Macos,Shell,Terminal,Zsh,我想将命令绑定到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运行在哪个操作系统中,而是想检查我的终端运行在哪个操作系统
if [[ "$(uname)" == "Darwin" ]]; then
bindkey "^e" some-command # Ctrl+E for OSX
else
bindkey "^[e" some-command # Alt+E for Linux
fi
但是,这不适用于这两个系统之间的ssh连接。所以实际上,我不想检查我的shell运行在哪个操作系统中,而是想检查我的终端运行在哪个操作系统中。有没有办法得到这些信息
请不要关注绑定中使用的密钥的详细信息。这与此无关:)
编辑:
为了让事情更清楚:
- 终端就是这个东西,你可以输入你的命令,比如,或者
- shell是接收和执行命令的thingy,如,或
它还将告诉您是在32位还是64位MacOS机器上。
ssh
可以将环境变量发送到服务器,并且默认情况下对少数变量执行此操作。尽管客户机操作系统上的任何信息都不是默认列表的一部分,但它可以扩展
uname
的输出,也可以只复制OSTYPE
(您不应该直接使用OSTYPE
,因为更改它可能不是一个好主意)。因此,在两个系统上的~/.zshrc
中都需要类似的内容(当然,在需要之前,在顶部的某个位置):
这将CLIENT_OSTYPE
设置为OSTYPE
的值(如果以前未设置)。因此,如果您在本地登录,它将被设置为OSTYPE
。但是如果您使用ssh
登录,它将被设置为传递的CLIENT_OSTYPE
CLIENT_OSTYPE
传递到服务器。为此,您需要编辑SendEnv
条目ssh客户端配置-特定于用户(~/.ssh/config
)或全局(最有可能是Linux上的/etc/ssh/ssh\u config
,Mac上的/etc/ssh\u config
):
在全局配置中,它可能已经被设置为某个值(LANG LC.*
),在这种情况下,只需添加到列表中:
SendEnv LANG LC_* CLIENT_OSTYPE
/etc/ssh/sshd\u config
和Mac上的/etc/sshd\u config
中通过修改AcceptEnv
完成:
AcceptEnv CLIENT_OSTYPE
与SendEnv
类似,这也可能已经设置为:
AcceptEnv LANG LC_* CLIENT_OSTYPE
然后,您可以使用
CLIENT_OSTYPE
的值来决定要使用的配置。arch
仅显示有关shell运行的系统的信息。此外,它仅在OSX上可用(如果可以从linux系统调用,这将是问题的解决方案,但它不能)。fwiw,.Oh,那么我在AUR搜索结果中没有看到正确的包。至少它在我的ArchLinux机器上默认不可用。。。Arch是Linux风格的名字,这一事实使得用Google搜索开源代码来编译Arch
命令非常困难。
AcceptEnv CLIENT_OSTYPE
AcceptEnv LANG LC_* CLIENT_OSTYPE