Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我的终端在哪个操作系统中运行?_Linux_Macos_Shell_Terminal_Zsh - Fatal编程技术网

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运行在哪个操作系统中,而是想检查我的终端运行在哪个操作系统

我想将命令绑定到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运行在哪个操作系统中,而是想检查我的终端运行在哪个操作系统中。有没有办法得到这些信息

请不要关注绑定中使用的密钥的详细信息。这与此无关:)

编辑: 为了让事情更清楚:

  • 终端就是这个东西,你可以输入你的命令,比如,或者
  • shell是接收和执行命令的thingy,如,或

我认为shell命令可能对您有所帮助


它还将告诉您是在32位还是64位MacOS机器上。

ssh
可以将环境变量发送到服务器,并且默认情况下对少数变量执行此操作。尽管客户机操作系统上的任何信息都不是默认列表的一部分,但它可以扩展

  • 您需要设置并导出包含所需信息的变量。您可以使用
    uname
    的输出,也可以只复制
    OSTYPE
    (您不应该直接使用
    OSTYPE
    ,因为更改它可能不是一个好主意)。因此,在两个系统上的
    ~/.zshrc
    中都需要类似的内容(当然,在需要之前,在顶部的某个位置):

    这将
    CLIENT_OSTYPE
    设置为
    OSTYPE
    的值(如果以前未设置)。因此,如果您在本地登录,它将被设置为
    OSTYPE
    。但是如果您使用
    ssh
    登录,它将被设置为传递的
    CLIENT_OSTYPE

  • 现在,您必须将SSH客户端设置为实际将
    CLIENT_OSTYPE
    传递到服务器。为此,您需要编辑
    SendEnv
    条目ssh客户端配置-特定于用户(
    ~/.ssh/config
    )或全局(最有可能是Linux上的
    /etc/ssh/ssh\u config
    ,Mac上的
    /etc/ssh\u config
    ):

    在全局配置中,它可能已经被设置为某个值(
    LANG LC.*
    ),在这种情况下,只需添加到列表中:

    SendEnv LANG LC_* CLIENT_OSTYPE
    
  • 最后,您必须将SSH服务器配置为实际接受此环境变量。这可以在Linux上的
    /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