我们可以运行像chsh -s /usr/local/bin/zsh
设置新的默认的shell。 有没有我们可以运行要知道什么是shell命令?
我的意思不是具有末端开放的,运行一个命令就知道我们是哪个shell中,我的意思是像在上面的例子,如果我在与终端是/bin/bash
开放,我应该怎么跑得到/usr/local/bin/zsh
,如果它是当前默认的shell?
我们可以运行像chsh -s /usr/local/bin/zsh
设置新的默认的shell。 有没有我们可以运行要知道什么是shell命令?
我的意思不是具有末端开放的,运行一个命令就知道我们是哪个shell中,我的意思是像在上面的例子,如果我在与终端是/bin/bash
开放,我应该怎么跑得到/usr/local/bin/zsh
,如果它是当前默认的shell?
您可以使用下面的命令echo $SHELL
适用于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。
您可以在当前的用户名/ 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必须存储这个别的地方。
如果你想获得一个用户的默认外壳,你可以用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部分。
在OS X,使用命令env | grep -i 'SHELL'
env | grep -i 'SHELL'
产生一个输出,例如: SHELL=/bin/sh
(如根,但是普通用户趋向于具有/斌/ bash作为默认shell)用少量的解析,路径中的壳(以及因此的壳本身)可以很容易地识别并从那里提取..