我正在使用学校的计算机,并且想使用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时,可以作为一般解决方案。我不确定.profileZsh 是否也可以调用它是否会变得多余,但是我们可以通过简单的检查安全地进行操作:
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/shSolaris 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)要求管理员更改您的外壳。这是不明智的,因为它会使您失去ftpin 的能力。只有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文件。注销并登录完成!