Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 在命令提示符下键入$SHELL命令时,$SHELL命令除了输出SHELL之外还有什么作用?_Unix - Fatal编程技术网

Unix 在命令提示符下键入$SHELL命令时,$SHELL命令除了输出SHELL之外还有什么作用?

Unix 在命令提示符下键入$SHELL命令时,$SHELL命令除了输出SHELL之外还有什么作用?,unix,Unix,我知道它应该输出我正在使用的shell类型,我认为它是这样的,因为它输出“bash-3.2”,但它并没有这样做,因为它实际上将我的提示符更改为“bash-3.2$”。还发生了什么?当我按Ctrl+D组合键时,我会返回到原来的提示。这是bash shell的开始吗?我以为打开一个终端窗口(我在MacOSX中)就是打开一个shell程序 我试着在谷歌上搜索,但我用$SHELL找不到任何好结果。顺便问一下,如何让Google在搜索中包含“$”?All$SHELL是一个包含SHELL名称的宏或SHELL

我知道它应该输出我正在使用的shell类型,我认为它是这样的,因为它输出“bash-3.2”,但它并没有这样做,因为它实际上将我的提示符更改为“bash-3.2$”。还发生了什么?当我按Ctrl+D组合键时,我会返回到原来的提示。这是bash shell的开始吗?我以为打开一个终端窗口(我在MacOSX中)就是打开一个shell程序


我试着在谷歌上搜索,但我用$SHELL找不到任何好结果。顺便问一下,如何让Google在搜索中包含“$”?

All$SHELL是一个包含SHELL名称的宏或SHELL变量。所以当你打字的时候

$ $SHELL
线路立即扩展到

$ bash-3.2
在您的系统上是bash可执行文件的名称。因此它运行可执行文件

如果只想查看变量中的内容,请键入

$ echo $SHELL
它只是将参数复制到stdout

您也可以创建自己的变量,例如

$ FRED="My name is Fred"
之后

$ echo $FRED
将打印

$ echo FRED
My name is Fred.

是的,当您打开终端窗口时,您正在启动外壳

shell程序的名称存储在
$shell
变量中。只需在命令行中运行“
$SHELL
”即可使用该变量中的值,然后将其解释为一个命令,该命令将运行一个新的SHELL。当您退出该shell时,您将返回到它停止的shell

有点像当你在办公桌上做某件事时,你的老板给了你一些新的工作,所以你在做这件新事情的时候暂停原来的工作,然后你可以在完成新任务后继续你的工作。:-)

此新shell不是登录shell,因此它使用默认提示,而不是shell登录配置文件中指定的提示

$SHELL
在需要从其他程序中运行命令时非常有用。例如,如果您在文本编辑器中,并且希望对shell命令的输出进行插值,则编辑器知道要通过
$shell
环境变量运行哪个shell程序



Rob Kennedy对
$SHLVL
变量发表了评论。这表示您在壳中的“深度”。例如,当您登录时,“
echo$SHLVL
”打印1。如果打开一个新的shell,相同的命令将打印2。退出子shell并返回登录shell后,命令再次打印1。这有点超出了您的要求,它的用法更为深奥,但它有点有趣。

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

在命令提示下尝试echo$SHELL

你会得到这样的结果

/bin/bash
那么当你打字的时候你真正在做什么呢

$ $SHELL
$SHELL

/bin/bash


这就是为什么您会得到一个新的shell

其他答案正确地指出,
shell
是一个包含shell程序名称的变量,但它们没有指定它所指的shell。其中一个答案造成了一种常见的错误理解,即
SHELL
变量表示当前正在使用的SHELL。事实并非如此

它实际上是一个环境变量,由系统登录过程设置为用户的默认登录shell。在Unix系统中,这通常在
/etc/passwd
中配置,除非使用NIS、LDAP、Active Directory或其他身份验证机制

从POSIX 2008中的

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

从上的Bash手册部分

shell的完整路径名保存在此环境变量中。如果是 在shell启动时未设置,Bash将为其指定的完整路径名 当前用户的登录shell

典型用途 它是由

  • 具有shell转义功能的程序,允许在程序内运行shell命令,例如,文本编辑器(如Vim)

  • GNU屏幕,以确定打开新窗口时哪个shell应作为默认shell运行


您可能还想提及SHLVL环境变量。