私のロケールを切り替える簡単なスクリプトを書いた。コンソールに1行ずつ作成して実行するとうまくいきますが、それとも.bashrc
。
しかし、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
現在のシェルに変更を適用するには、スクリプトを「実行」するのではなく「インポート」する必要があります。したがって、スクリプト名が「script.sh」の場合、変更は./script.sh
そのまま実行されず、現在のセッションに適用されます。. ./script.sh
答え2
普通のようです。この変更は、ローカルシェルセッション(つまりスクリプトを実行するセッション)にのみ適用されます。親シェルは影響を受けません。
現在のシェルでコマンドを実行すると現在のシェルに影響し、.bashrcに入れると起動時に現在のシェルにも影響します。
ただし、スクリプトに入れると、スクリプトを現在のスクリプトの子として実行するための新しいシェルが作成されるため、環境を変更しても親スクリプトには影響しません。
答え3
私は同じ問題があり、ついに〜/.bashrcのエイリアスを使用して解決しました。
alias chlang="export LANG=en_US.utf8;export LANGUAGE=en_US.utf8;export LC_ALL=en_US.utf8"