【问题标题】:How can I tell which Unix shell I am using? [duplicate]如何判断我使用的是哪个 Unix shell? [复制]
【发布时间】:2011-03-21 22:23:15
【问题描述】:

有没有一种简单的方法可以让我知道我在哪种类型的 Unix shell 中?

显示我是否在 Bash、C shellKornShell (ksh)、tcshZ shell (zsh) 中的命令?

例如,

whatshellisthis

【问题讨论】:

    标签: linux shell unix


    【解决方案1】:

    Mac

    ps
    
      PID TTY           TIME CMD
      223 ttys000    0:00.33 -bash
    

    OpenBSD

    ps
    
      PID TT  STAT       TIME COMMAND
    20038 p0  Ss      0:00.01 -ksh (ksh)
    22251 p0  R+      0:00.00 ps
    

    或者只是echo $SHELL

    【讨论】:

    • 我认为$SHELL 是系统(或用户)的默认外壳,通常(但不一定)是在任何给定时刻实际使用的外壳。
    【解决方案2】:

    试试:

    echo $0
    

    这通常适用于一系列 shell。

    【讨论】:

    • 不适用于鱼
    • @rominf: 使用fish 只需输入$,然后输入tab。你会看到定义了一堆$__fish$fish 变量
    • 这在源文件中也不起作用。
    【解决方案3】:

    我所知道的每个 shell 都将 $ 变量 ($$) 设置为其 pid。所以...

    ps | grep $$
    

    【讨论】:

    • 鱼是个例外。你需要使用 %self
    • 有时我觉得鱼不应该算在“unix shell”中。我们在一堆意大利面里很舒服,请不要把所有的面条都拉直。
    【解决方案4】:

    如果您使用的是 OS X 终端,那么当您启动终端时,shell 会在终端的标题栏中指定 - 如下所示:Terminal - ShellName - 80x24

    【讨论】:

    • 我认为这是正确的答案。
    【解决方案5】:

    echo $SHELL 命令将为您提供相对于 root 的 shell 名称。

    【讨论】:

    • SHELL 不保证被设置。例如,我的登录 shell 是 bash,但如果我在命令行运行 /bin/sh,即使 /bin/sh ls dash,SHELL 仍然是 /bin/bash。
    • $SHELL 是登录 shell。如果你的登录 shell 是 bash 并且你启动了 tcsh,那么即使你运行的 shell 是 tcsh,$SHELL 仍然是 bash。
    • 签出# ps -p $$ |尾-1 | awk '{print $4}'
    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-09-14
    相关资源
    最近更新 更多