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

Laz*_*zer 5 shell 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.
$
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 6

您可以使用usermod带有-s选项的命令设置用户的默认 shell (需要 root 权限):

sudo usermod -s /home/lazer/bash/bash-4.1/bash lazer
Run Code Online (Sandbox Code Playgroud)

  • 另外:你也可以使用`chsh` (2认同)

Gil*_*il' 6

首先,确保您最喜欢的 bash 在$PATH系统一之前。还要将环境变量设置SHELL为您最喜欢的交互式 shell(大概是您自己安装的 bash 版本)的完整路径。

你不能在没有 root 干预的情况下将你自己的 shell 设置为登录 shell,但通常你不需要比 POSIX sh 更好的任何东西~/.profile。您可以放在exec $SHELL最后,~/.profile以便在控制台或 ssh 会话中获得您最喜欢的交互式 shell,但请确保不要从非交互式 shell 中执行此操作(例如,某些 Linux 发行版有 X 会话脚本启动与#!/bin/bash --login)。很难准确检测何时调用execin是合理的.profile,但在大多数情况下测试 shell 是交互式的;你可以这样做:

case $- in
  *i*) :;;
  *) exec "$SHELL";;
esac
Run Code Online (Sandbox Code Playgroud)

如果你不是 root,那就是你所能做的。特别是,带头的脚本#!/bin/bash将继续使用系统 bash,而带头的脚本#!/usr/bin/env bash将使用你的。

如果您是 root,则可以将 bash 安装添加到/etc/shells,然后您可以使用chsh将登录 shell 更改为它。您也可以替换/bin/bash为您自己的版本,但我不建议将其用于如此关键的系统组件。如果你真的想更换/bin/bash,至少让你的包管理器开心;在基于 dpkg 的系统上,您可以使用dpkg-divert.