如何获得默认的shell(How to get default shell)

2019-09-01 23:55发布

我们可以运行像chsh -s /usr/local/bin/zsh设置新的默认的shell。 有没有我们可以运行要知道什么是shell命令?

我的意思不是具有末端开放的,运行一个命令就知道我们是哪个shell中,我的意思是像在上面的例子,如果我在与终端是/bin/bash开放,我应该怎么跑得到/usr/local/bin/zsh ,如果它是当前默认的shell?

Answer 1:

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



Answer 2:

适用于MacOS:

dscl . -read /Users/username UserShell

对于当前的Mac系统用户:

dscl . -read ~/ UserShell

要使用解析路径直列sed

dscl . -read ~/ UserShell | sed 's/UserShell: //'

使用$SHELL将报告当前登录shell,而不是默认的登录shell。 在某些情况下,这些都是不一样的。 例如,在一个IDE如Visual Studio代码用于打开一个集成的终端没有咨询默认壳工作时。

此外,由马丁·马丁C.指出, $SHELL是后不会改变恒定chsh改变默认的登录shell。



Answer 3:

您可以在当前的用户名/ etc / passwd文件的grep,并用切割提取的信息相应的列:

grep ^$(id -un): /etc/passwd | cut -d : -f 7-

$(id -un)是一种较安全$USER来获取用户名。 使用^在用户名称前面:使后肯定,如果您的用户名是别人的用户名的子部分,你没有得到一个错误匹配。

$SHELL也可以使用,如建议。 但是,如果它不会工作chsh在当前shell使用,因为变量不更新。 此外变量没有保护,以防止被更改,所以理论上它可以被设置成完全不同的东西。

更新尝试的OS X兼容的解决方案。 也许不是最佳的正则表达式:

grep ^.*:.*:$(id -u): /etc/passwd | cut -d : -f 7-

这是基于用户ID的。 如果整个用户条目丢失,不仅是用户名,然后OSX必须存储这个别的地方。



Answer 4:

如果你想获得一个用户的默认外壳,你可以用grep在/etc/passwd 。 喜欢:

kent$  grep "$USER" /etc/passwd
kent:x:1000:1000::/home/kent:/bin/zsh

告诉我,当前用户(肯特)具有默认的shell /bin/zsh

如果你只是想赶上外壳部分:

kent$  awk -F: -v u="$USER" 'u==$1&&$0=$NF' /etc/passwd
/bin/zsh

如果您想获得其他用户的默认外壳,只需更换$ USER部分。



Answer 5:

在OS X,使用命令env | grep -i 'SHELL' env | grep -i 'SHELL'产生一个输出,例如: SHELL=/bin/sh (如根,但是普通用户趋向于具有/斌/ bash作为默认shell)用少量的解析,路径中的壳(以及因此的壳本身)可以很容易地识别并从那里提取..



文章来源: How to get default shell
标签: macos shell