当我运行echo $SHELL
输出时,/bin/tcsh
这意味着我正在运行一个tcsh
shell。但是例如当我发出以下命令时
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 $$
我想你所有的问题都得到了解答。如果还有疑问,可以参考这篇文章来源。