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