当我在命令提示符下输入shell时,$ SHELL命令除了输出shell之外还做了什么?

时间:2008-12-22 00:32:30

标签: unix

我知道这应该输出我正在使用的shell,我认为它确实如此,因为它输出“bash-3.2”,但它并没有那么做,因为它实际上改变了我的提示“的bash-3.2 $”。还有什么事?当我按Ctrl + D时,我会回到原来的提示符。这是启动bash shell吗?我想通过打开一个终端窗口(我在Mac OS X中),我正在打开一个shell程序。

我试过谷歌,但我无法获得$ SHELL的任何好结果。另外,如何让Google在搜索中加入“$”?

4 个答案:

答案 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或其他一些身份验证机制。

来自Environment Variables

上的POSIX 2008部分
  

SHELL

     

此变量应表示用户首选命令的路径名   语言翻译。

来自Bash Variables

上的Bash手册部分
  

SHELL

     

shell的完整路径名保存在此环境变量中。如果它   在shell启动时没有设置,Bash为其分配了完整的路径名   当前用户的登录shell。

典型用途

使用它
  • 以shell转义为特色的程序,允许在程序中运行shell命令,例如文本编辑器,如Vim。

  • GNU Screen,用于确定在打开新窗口时应将哪个shell作为默认shell运行。

答案 3 :(得分:1)

$ SHELL本身不是命令;它是一个存储您当前正在运行的shell名称的变量

在命令提示符下尝试echo $SHELL

你会得到类似的东西

/bin/bash

所以当你输入

时你真正在做什么
  

$ SHELL

  

/斌/庆典

这就是你获得新shell的原因