我可以访问多个 RHEL 系统,这些系统使用 Active Directory 作为用户帐户,并使用 NFS 挂载作为主目录。
我们的登录 shell 存储在 Active Directory 中并且始终为/bin/ksh
.我想永远拥有/bin/bash
,所以我想我可以在 中实现这一点~/.profile
。在阅读了这里和 SO 上的几篇文章后,我想出了这个:
if [ ! -n "$BASH" ] ;then
SHELL=`type -P bash`
exec bash -l;
fi
- 这是执行此操作的标准/好方法吗?
- 我读
! -n "$BASH"
为NOT ("$BASH" is NOT null)
- 因此
true
,如果它为空,false
如果它不为空。 - 如果是这样那为什么不只是
-z "$BASH"
或者甚至! "$BASH"
?
- 因此
答案1
您显示的代码很可能用于bash
从您的~/.profile
文件启动登录 shell。我个人会用这样的command
方式来检测是否存在bash
:
if [ -z "$BASH" ]; then
shell=$( command -v bash )
if [ -n "$shell" ]; then
exec env SHELL="$shell" bash --login
fi
unset shell
echo 'Bash not present, continuing...' >&2
fi
bash
这获取到的路径$shell
,然后用于测试是否bash
可用和设置SHELL
环境变量bash
。
是否使用[ ! -n "$BASH" ]
or[ -z "$BASH" ]
并不重要(所以做任何感觉正确且最容易阅读的事情),但我可能会不是使用! [ "$BASH" ]
或[ ! "$BASH" ]
.在一般情况下,您可能最终会测试以破折号开头的字符串,这可能会混淆测试,因此在测试字符串是否为空时最好坚持使用-n
or 。-z
~/.profile
如果系统管理员有一天决定卸载bash
,并改为编写一个单独的~/.bash_profile
文件,您可能还希望保持基本不变(除上述内容外)。如果可用,bash
shell 将使用,而不是,并且启动失败将导致您的默认登录 shell 成功使用,而不会因可能的 bashisms 而绊倒。~/.bash_profile
~/.profile
bash
~/.profile