我刚刚在我的机器上安装了 bash v4.1.0。
旧版本在/bin/bash
.有没有一种方法可以使用新版本的 bash 而无需替换旧版本/bin
?我希望将较新的版本用作默认版本
$ which bash
/bin/bash
$ bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
$ ~/bash/bash-4.1/bash --version
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$
答案1
首先,确保您最喜欢的 bash 位于$PATH
系统 bash 之前。还将环境变量设置SHELL
为您最喜欢的交互式 shell 的完整路径(大概是您自己安装的 bash 版本)。
如果没有 root 的干预,您无法将自己的 shell 设置为登录 shell,但通常您不需要任何比 POSIX sh 更好的东西~/.profile
。你可以exec $SHELL
把~/.profile
和#!/bin/bash --login
)。很难准确地检测何时调用是合理的exec
,.profile
但测试 shell 是否是交互式的在大多数情况下都是有效的;你可以这样做:
case $- in
*i*) :;;
*) exec "$SHELL";;
esac
如果您不是 root,那么您能做的就只有这些了。特别是,headed 脚本#!/bin/bash
将继续使用系统 bash,而 headed 脚本#!/usr/bin/env bash
将使用您的 bash。
如果您是 root,则可以将 bash 安装添加到/etc/shells
,之后您可以使用chsh
它来更改您的登录 shell。您也可以替换/bin/bash
为您自己的版本,但对于如此关键的系统组件,我不建议这样做。如果你真的想替换/bin/bash
,至少让你的包管理器高兴;在基于 dpkg 的系统上,您可以使用dpkg-divert
.
答案2
usermod
您可以使用带有选项的命令设置用户的默认 shell -s
(需要 root 权限):
sudo usermod -s /home/lazer/bash/bash-4.1/bash lazer