我在哪个外壳上运行?


39

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

alias emacs 'emacs -nw' 

我收到以下错误:

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

当我发行时,alias emacs="emacs -nw"它运行正常!

由于我正在运行,tcsh但是命令由解释,这令人困惑bash

可能是什么原因?


tcsh/csh它的当前外壳位于$shell
HongboZhu

Answers:


48

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

ps $$

这在ps支持BSD语法的最新Unix / Linux上应该可以使用。否则,这是便携式(POSIX)方式

ps -p $$

如果您正在运行,那应该返回如下内容tcsh

8773 pts/10   00:00:00 tcsh

如果要tcsh成为默认外壳,请使用chsh进行设置。


您知道如何检查已加载哪个配置文件吗?(bashrc)
coffeMug

@Coffe_Mug不确定您的意思。您可以使用设置默认外壳程序chsh.bashrc只有在您i)运行bash和ii)作为交互式非登录外壳程序运行时,才会读取默认外壳程序。您如何登录到这台机器?
terdon

我有一个脚本,可以从tcsh shell启动此bash shell。
coffeMug

4
为什么不ps $$
-cjm

1
@cjm为什么不正确,答案已编辑。
terdon

8

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

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

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


1

这适用于linux:

lsof -a -p $$ -d txt

或者,如果您需要更强大的选择(更多系统):

lsof -a +D /bin +D /usr/bin -p $$ -d txt

1

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

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

只需在狭窄的地方进行故障排除就可以了。干杯。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.