如何获取默认shell

use*_*369 25 macos shell

我们可以运行类似chsh -s /usr/local/bin/zsh设置新的默认shell.我们可以运行一个命令来了解那个shell是什么吗?

我并不是说终端打开并运行一个命令来知道我们所在的shell,我的意思就像在上面的例子中,如果我在一个/bin/bash打开的终端,/usr/local/bin/zsh如果它是当前的,我该怎么办才能得到默认shell?

Bil*_*ill 32

您可以使用以下命令 echo $SHELL

  • 这不起作用.SHELL不显示默认shell.此信息存储在/ etc/passwd中.或者对于Mac使用:`dscl.-read/Users/username UserShell`(感谢Lri的信息) (13认同)
  • 请记住,所有shell都可能无法设置`SHELL`,并且无法保证所有shell都使用相同的规则来设置其值. (3认同)
  • @chepner SHELL变量是标准的.它不是由shell本身设置的,而是在登录过程启动shell之前设置的. (3认同)
  • @Bill确切地说,当前登录shell与默认shell不同.阅读http://linuxg.net/the-unix-and-linux-shell-variable-shell/,它说"$ SHELL是产生当前会话的父shell".它不等于chsh设置的默认shell (3认同)
  • 来自 pubs.opengroup.org:`这个变量 [SHELL] 应表示用户首选命令语言解释器的路径名。` 您不能期望此变量与默认 shell 有任何关系。用户可以(也许是期望的!)在启动文件中设置 SHELL,就像设置 EDITOR 和 PAGER 一样。假设大多数用户会设置 SHELL 以匹配他们的默认 shell 可能是合理的,但是用户什么时候表现得合理呢? (3认同)
  • 虽然“$SHELL”*是*一个标准,并且它对某些事情很有用,但我认为它不是这个特定问题的合适答案。*系统默认shell,*用户的*默认shell(这个问题所问的是什么),*当前* shell(许多人认为`$SHELL`是什么),以及“首选*命令语言解释器*”( `$SHELL` 实际上是什么)都是*非常*不同的。任何假设“$SHELL”等于(或应该)等于当前用户最后传递给“chsh”的字符串的脚本都不能在用户之间移植,更不用说在系统之间移植了,除了运气。 (2认同)

小智 14

对于macOS

dscl . -read /Users/username UserShell
Run Code Online (Sandbox Code Playgroud)

  • @ user137369如果从shell中调用`chsh`,则无法更新`$ SHELL`.所以`echo $ SHELL`报告旧的,现在不正确的值,但是`dscl.-read/Users/$ USER UserShell`报告新值. (6认同)