我知道这应该输出我正在使用的shell,我认为它确实如此,因为它输出“bash-3.2”,但它并没有那么做,因为它实际上改变了我的提示“的bash-3.2 $”。还有什么事?当我按Ctrl + D时,我会回到原来的提示符。这是启动bash shell吗?我想通过打开一个终端窗口(我在Mac OS X中),我正在打开一个shell程序。
我试过谷歌,但我无法获得$ SHELL的任何好结果。另外,如何让Google在搜索中加入“$”?
答案 0 :(得分:6)
是的,当您打开终端窗口时,您正在启动一个shell。
shell程序的名称存储在$SHELL
变量中。在命令行中简单地运行“$SHELL
”使用该变量中的值,然后将其解释为命令 - 运行新的shell。退出该shell时,将返回到它停止的shell。
有点像你在办公桌上做某事,而你的老板给你做了一些新工作,所以你在做新事物时暂停原来的工作,然后你就可以从你离开的地方继续工作一旦你完成了新任务。 : - )
这个新shell不是登录shell,因此它使用默认提示而不是shell登录配置文件中指定的提示。
当您需要从另一个程序中运行命令时, $SHELL
非常有用。例如,如果您在文本编辑器中并且想要插入shell命令的输出,则编辑器会知道您的$SHELL
环境变量要运行哪个shell程序。
Rob Kennedy评论$SHLVL
变量。这表明你在炮弹中有多“深”。例如,当您登录时,“echo $SHLVL
”将打印1.如果您打开一个新shell,则会输出相同的命令2.退出该子shell并返回到您的登录shell后,该命令将再次打印1。这有点超出你的要求,它的用途更深奥,但它有点有趣。
答案 1 :(得分:3)
所有$ SHELL都是包含shell名称的宏或shell变量。所以当你输入
$ $SHELL
该行立即扩展为
$ bash-3.2
在您的系统上是bash可执行文件的名称。所以它运行可执行文件。
如果您想查看变量中的内容,请键入
$ echo $SHELL
只是将参数复制到stdout。
您也可以创建自己的变量,例如
$ FRED="My name is Fred"
之后
$ echo $FRED
将打印
$ echo FRED
My name is Fred.
答案 2 :(得分:3)
其他答案已正确指出SHELL
是一个包含 shell程序名称的变量 - 但它们没有指定它引用的shell。其中一个答案是对SHELL
变量指示当前正在使用的shell的常见误解。事实并非如此。
它实际上是系统登录过程为用户设置的默认登录shell 的环境变量。在Unix系统中,这通常在/etc/passwd
中配置 - 除非使用NIS,LDAP,Active Directory或其他一些身份验证机制。
上的Bash手册部分SHELL
此变量应表示用户首选命令的路径名 语言翻译。
SHELL
shell的完整路径名保存在此环境变量中。如果它 在shell启动时没有设置,Bash为其分配了完整的路径名 当前用户的登录shell。
使用它
以shell转义为特色的程序,允许在程序中运行shell命令,例如文本编辑器,如Vim。
GNU Screen,用于确定在打开新窗口时应将哪个shell作为默认shell运行。
答案 3 :(得分:1)
$ SHELL本身不是命令;它是一个存储您当前正在运行的shell名称的变量
在命令提示符下尝试echo $SHELL
你会得到类似的东西
/bin/bash
所以当你输入
时你真正在做什么$ SHELL
是
/斌/庆典
这就是你获得新shell的原因