终端的默认外壳是什么?


51

假设我打开一个终端并输入/执行了一些shell命令。

但是我没有明确调用Bash或任何其他shell。

默认情况下使用什么外壳?

Answers:


51

在您的行中指定的那一行/etc/passwd(它是:分隔的行,而shell是最后一行)。

例如我的:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

这是/bin/bash(Ubuntu默认)

您也可以使用chsh

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

这是在告诉我我的外壳,/bin/bash然后让我对其进行更改。

最后,echo $SHELL将执行以下操作:

$ echo $SHELL
/bin/bash

如果是bash,为什么有时会像sudo bash -c“ netstat -an | grep LISTEN | grep -v ^ unix”那样显式调用它?
DrStrangeLove

我个人认为这是一个错误的命令-甚至都不需要root。如果是这样,最好写成sudo netstat -an | grep LISTEN | grep -v ^unix。我认为没有理由将其包含在bash子外壳中。

2
@DrStrangeLove:如果管道中有多个命令需要root权限,则sudo bash -c "..."可以确保整个管道都由root执行。
基思·汤普森

如果您不知道哪些命令需要root用户(为什么),则不应该运行它们。否则,为什么要对任何命令/程序/脚本的信任程度超过要求。如果你不能commandA | sudo commandB | commandC,你可以做一个sudo id第一(运行id命令root,而且还获得了“ 无密码提示使用sudo的令牌持续(默认),15分钟。”
waltinator

2
如果使用,chsh必须注销并重新登录才能看到此更改。
尼尔·特拉夫特

17

GNU Bash是Ubuntu终端默认使用的shell。但是,在系统引导时执行脚本时,将使用破折号,因为破折号是/ bin / sh。

这在$ SHELL环境变量中定义。您可以通过echo $SHELL在终端中输入进行检查。


14

输入以下内容将显示终端打开的外壳:

echo $SHELL

但是,要找出您当前所处的外壳(可能已经更改了),请输入

ps -p $$

例如,您将在示例输出中看到外壳为bash

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

另一种方法是使用

echo $0

这将仅返回当前shell的名称。


为简单起见+1echo $0
djthoms

好答案!谢谢,由于某些原因,echo $ SHELL无法正常工作(总是使用该命令),而您的两个备选方法也可以工作。谢谢!
wolfdawn '16

3

默认情况下是bash:

env | grep ^SHELL=

在大多数情况下会产生

SHELL=/bin/bash

不必要。如果使用创建新用户useradd,则默认为sh$ useradd -D|grep SHELL SHELL=/bin/sh
Sparhawk

+1,因为尽管选择的答案需要更少的输入,但是拥有多种方法来做某事总是很高兴的。

2

要获取当前shell可执行文件的文件路径,可以使用

readlink -f /proc/$$/exe

一些可能的输出是:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.