我在哪个 shell 上运行?

我在哪个 shell 上运行?

当我运行echo $SHELL输出时,/bin/tcsh这意味着我正在运行一个tcshshell。但是例如当我发出以下命令时

alias emacs 'emacs -nw' 

我收到以下错误:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

当我发布时alias emacs="emacs -nw"它运行良好!

这很令人困惑,因为我正在运行,tcsh但命令是由bash.

可能是什么原因?

答案1

$SHELL不一定是您当前的 shell,它是默认登录 shell。要检查您正在使用的外壳,请尝试

ps $$

这应该适用于最新的ps支持 BSD 语法的 Unix/Linux。否则,这是可移植的(POSIX)方式

ps -p $$

如果您正在运行,应该返回类似这样的内容tcsh

8773 pts/10   00:00:00 tcsh

如果您想成为tcsh默认 shell,请使用chsh设置它。

答案2

在命令行中,您还可以使用该$0变量来确定您正在使用哪个 shell。例如:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

注意:您无法在脚本中使用 $0 确定 shell,因为 $0 将是脚本本身。

答案3

这是对上述所有更好答案的修正。我在识别破折号时遇到了一个小问题;似乎分享是正确的:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

非常适合在紧张的地方进行故障排除。干杯。

答案4

Unix/Linux 操作系统可能安装了多个 shell。您可以在终端中键入以下命令来查看您正在使用哪个 shell:

下面是清单,

  • Bourne Shell – sh
  • C Shell – csh
  • T 外壳 – tcsh
  • 科恩壳牌 – ksh
  • Bourn-again Shell – bash
  • 仪表板外壳
  • Z壳

该列表并不完整,还有许多其他 shell。

/etc/shells 文件存储系统中安装的所有 shell 的列表。只需运行以下命令即可找出已安装的 shell,

$ cat /etc/shells

在 /etc/passwd 文件上运行 grep 命令可以了解登录 Unix 或 Linux 操作系统时的默认 shell。

$ grep john /etc/passwd    

您还可以使用 $SHELL 变量来达到相同的目的。

echo $0
$ echo $SHELL

如果您使用的是,结果将类似于以下内容巴什谍影重重 外壳) 终端:当系统上安装了多个 shell 时,您可以随时切换 shell。

那么你怎么知道你现在正在运行哪个 shell 呢?

只需使用以下命令

-bash
$ ps -p $$

我想你所有的问题都得到了解答。如果还有疑问,可以参考这篇文章来源

相关内容