我正在使用学校的计算机,并且想使用zsh
而不是bash
。我想将其设置为默认外壳程序,但是$ chsh -s $(which zsh)
由于我没有管理员权限,因此无法运行命令。
有什么办法可以放入我的.bashrc
东西,或者zsh
当它作为解决方法打开时会自动调用的东西吗?
澄清一下,zsh
已经安装了。
bash
被显式调用也是如此。最好放进去.bash_profile
。
我正在使用学校的计算机,并且想使用zsh
而不是bash
。我想将其设置为默认外壳程序,但是$ chsh -s $(which zsh)
由于我没有管理员权限,因此无法运行命令。
有什么办法可以放入我的.bashrc
东西,或者zsh
当它作为解决方法打开时会自动调用的东西吗?
澄清一下,zsh
已经安装了。
bash
被显式调用也是如此。最好放进去.bash_profile
。
Answers:
.bash_profile
在您的主目录中创建并添加以下行:
export SHELL=/bin/zsh
exec /bin/zsh -l
更新:.profile
默认外壳不是bash时,可以作为一般解决方案。我不确定.profile
Zsh 是否也可以调用它是否会变得多余,但是我们可以通过简单的检查安全地进行操作:
export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l
我们还可以使用which
来获取zsh
依赖于的值的动态路径$PATH
:
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
.bash_profile
将不会被引用。把它放进去怎么样.profile
?
.profile
没有用。也不会.profile
打电话给Zsh
?它可能变得多余。尚未检查。(更新:它现在确实起作用了,不确定我以前犯了什么错误。)关于使用的可能缺点的任何想法.profile
?
.profile
在.bash_profile
不存在Bash的情况下才提供(.bash_profile
当然,除非您手动从那里获得)。具体而言,源的bash文件中的第一个[ .bash_profile
> .bash_login
> .profile
]它找到。它仅.profile
作为POSIX(Bourne shell)兼容性功能寻找。
zsh
。.bash_profile
并且.profile
不起作用(文件甚至没有执行,在大学计算机上为Fedora 26)。
通常,您可以chsh
以非root用户身份使用。但是有时会禁用它,通常在使用某种形式的联网用户数据库(例如NIS和LDAP)的站点中。可能会有ypchsh
(NIS)或chsh.ldap
(LDAP)。
chsh
通常也将只允许某些已批准的外壳,通常是中列出的外壳/etc/shells
。
如果您不能chsh
在网站上使用它或其变体,则将登录shell安排到exec
您喜欢的shell,然后将SHELL
变量设置为指向您喜欢的shell。
如果你的登录shell是sh
,dash
或ksh
:你需要编辑文件~/.profile
。请注意,该文件是在交互式会话的开始以及一些非交互式会话启动脚本(例如,针对X11会话)时读取的,因此您需要注意:仅exec
当当前外壳是交互式的。除了Bourne shell(/bin/sh
Solaris 10和更低版本)之外,您可以通过i
选项列表($-
)中的存在来判断shell是交互式的。
preferred_shell=
if [ -x /bin/zsh ]; then
preferred_shell=/bin/zsh
fi
…
if [ -n "$preferred_shell" ]; then
case $- in
*i*) SHELL=$preferred_shell; export SHELL; exec "$preferred_shell";;
esac
fi
如果您希望zsh读取您的.zprofile
,请传递该-l
选项。
如果您的登录shell是bash
,则可以按照上述步骤进行。或者,您可以将这些命令放在中~/.bash_profile
。大多数会话启动脚本只能读取~/.profile
,不能读取~/.bash_profile
,但是我看过一些在bash和read下运行的脚本.bash_profile
,因此即使在此处,也应注意不要exec
在非交互式shell中调用。
如果您的登录shell是csh或tcsh,请参阅更改没有chsh或管理员权限的默认shell中的示例
如果您chsh
由于没有管理员权限而无法运行,请与具有此权限的人联系。
很可能您不能chsh
以非root用户身份使用,因为您正在使用的系统已配置chsh
为无法运行,例如,因为系统使用NIS或LDAP而不是仅使用/etc/passwd
文件。也许您的系统管理员只想保持一些控制权。
更改外壳程序的过程取决于组织的策略。可能会有一个本地命令执行chsh
通常的操作。或者,您可能需要提交支持请求以请求换壳。
其他大多数答案都不错,但是如果您的管理员响应迅速,那么您可能不希望操弄启动脚本。我可能只是zsh -l
在登录后手动调用,直到管理员开始更新我的帐户为止。
要记住的另一件事:有时不同的Shell可以使用相同的启动文件。例如,sh
并且bash
既可以执行$HOME/.profile
,并csh
与tcsh
既可执行$HOME/.login
和$HOME/.cshrc
(尽管shell特定的启动文件一样.bashrc
,.bash_profile
和.tcshrc
可以覆盖那些)。如果您的默认外壳程序是,/bin/csh
并且您要使用/bin/tcsh
,则更新您.login
的调用/bin/tcsh -l
可能会导致无限循环。zsh
不会执行bash
特定于启动的文件,因此这对您来说不是问题。
大多数shell设置标识变量,外壳程序正在运行($BASH_VERSION
,$tcsh
,$ZSH_VERSION
)。如果要编写启动代码来调用首选的shell,将其封装在中并不是一个坏主意,if
因此只有在尚未运行该shell 的情况下,它才会被执行。使用konsolebox的答案中的代码:
if [ "${ZSH_VERSION:-unset}" = "unset" ] ; then
export SHELL=/bin/zsh
exec /bin/zsh -l
fi
(增加检查的复杂性,"${ZSH_VERSION:-unset}"
而不是仅仅"$ZSH_VERSION"
考虑您已经完成的可能性set -o unset
,该选项会使对未定义变量的引用成为错误。)
我可以想到一些情况。
zsh
不在中/etc/shells
,OP希望使用它而不必zsh
在命令提示符下键入。可能的解决方案。
a)使用配置文件技巧在登录时执行它。这和实际更改外壳一样有效。
b)恳请管理员添加到它zsh
,/etc/shells
以便您可以添加chsh
它
c)要求管理员更改您的外壳。这是不明智的,因为它会使您失去ftp
in 的能力。只有ftp
在有shell的情况下才能使用/etc/shells
用户希望逃脱受限制的外壳,最有可能是rbash
或rsh
。
如果.profile
是可编辑的,则PATH
可以通过对其进行扩展进行扩展。进入/bin
路径后,您可以bash
从内部开始rsh/rbash
,获得对chsh
命令的访问权,以使您可以更改外壳。许多命令具有外壳转义符,可用于转义受限制的外壳并重新获得对的访问chsh
。
chsh
确实由于其他原因而无法使用。解决方案1也是这里的答案。
方案2是实际更改默认Shell的唯一原因(限制太多)。
我不认为提供的答案实际上是zsh
默认的外壳。只要用户登录到他的默认shell,就可以简单地将shell更改为zsh 。用户仍将登录到它,DEFAULT SHELL
但与此同时,shell将更改为zsh
要更改默认的shell,请使用:
usermod -s /path/to/shell username
您应该这样做。
否则,以上解决方法将派上用场。
从评论中添加
chsh -s /path/to/zsh # considered as standard as compared to usermod
它可以由用户为他/她自己调用。
chsh -s /path/to/zsh
是更标准的,通常(但并非总是)不需要root访问,usermod
这与总是需要不同。因此,您的答案比问题已经指出的不起作用的问题更多。
zsh
的.bashrc
文件。注销并登录完成!