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