更改语言环境的 Shell 脚本没有效果

更改语言环境的 Shell 脚本没有效果

我编写了一个简单的脚本来切换我的区域设置。如果我在控制台中编写每一行并执行它,它就可以正常工作,或者如果我将其放入.bashrc.

但是,当我使用 sudo 或不使用 sudo 执行脚本时,它绝对没有明显的效果。 (区域设置保持不变)

问题是这是为什么呢?
我的脚本是错误的还是我错过了一些不同的东西。

来源:

#!/bin/bash
set -x
LANG=en_US.utf8
LANGUAGE=en_US.utf8
LC_ALL=en_US.utf8
export LANG
export LANGUAGE
export LC_ALL
echo "Language set!"

我收到了执行步骤和Language set回声,但仅此而已。我也尝试过#!/bin/sh


操作系统信息:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

Kernel:    3.13.0-042stab103.6

答案1

要将更改应用到当前 shell,您需要“获取”它,而不是“执行”脚本。因此,如果您的脚本名为“script.sh”,那么您的更改将应用​​到当前会话./script.sh,而不是将其作为 执行。. ./script.sh

答案2

看起来很正常。该更改仅应用于本地 shell 会话(即运行脚本的会话),父 shell 不受影响。

如果您在当前 shell 中运行命令,则会影响您当前的 shell,如果您将其放入 .bashrc 中,那么它也会在启动时影响您当前的 shell。

但是,当您将其放入脚本中时,会生成一个新的 shell 来将该脚本作为当前脚本的子脚本运行,因此对其环境的任何修改都不会影响其父脚本。

答案3

我遇到了同样的问题,最后通过在 ~/.bashrc 中使用别名解决了它

alias chlang="export LANG=en_US.utf8;export LANGUAGE=en_US.utf8;export LC_ALL=en_US.utf8"

相关内容