我在OSX上。我最近开始使用鱼壳。我注意到
echo $SHELL
还给我回来
/bin/bash
即使在我设置了终端以使用鱼壳之后,以及在从所述鱼壳内部执行命令时。(鱼壳的路径是/usr/local/bin/fish
。)同样,如果我运行python程序
import os
print(os.environ['SHELL'])
我从鱼壳中得到/bin/bash
了输出,而不是/usr/local/bin/fish
。
所以我想知道,如果SHELL环境变量没有向我显示当前shell的类型,那么它的相关性是什么?
根据BASH的源代码,将$SHELL
环境变量设置为返回用户的默认Shell。这是从用户的个人资料(/etc/passwd
如果需要的话,)中检索的。
Python只是返回其父级(bash或fish)提供给它的环境变量,所以这不是Python / Perl / etc的错。
话虽如此,如果您想找出您实际使用的shell,建议的方法是查看特殊变量$0
,该变量应返回诸如-bash
或的值/usr/local/bin/fish
。但是,这只能在外壳程序内部运行,因为Python / Perl / etc大概会返回其解释器路径。
那么变量的目的是什么?这是UNIX上的事情-如果您创建会话,这反映了已设置为操作系统将在登录时运行并附加到您的会话并处理STDIN / STDOUT的默认程序的内容。此默认程序将成为您从此处启动的所有程序的父级。
是的,您可以从技术上做到这一点,但sh / ksh / bash / zsh / fish是典型的,尽管将其设置为显示“不允许交互式外壳”并在管理员不允许的环境中退出的情况并不少见想要外壳访问。话虽这么说,但如果您希望默认情况下将其设置为钓鱼,则需要在用户帐户中进行设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句