如何确保我使用的是最新版本的 bash?

如何确保我使用的是最新版本的 bash?

我刚刚在我的机器上安装了 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

相关内容