CentOS 6.4:
私は最新バージョンのdevtoolset(1.1)をインストールしましたが、それをデフォルト値に永久に設定する方法がわかりました。 CentOS 6を実行しているサーバーにSSHで接続するときは、次のコマンドを実行する必要があります。scl enable devtoolset-1.1 bash
~/.bashrcに追加して最後の行に貼り付けようとしましたが、成功しませんでした。
答え1
~/.bashrc
または、~/.bash_profile
開発ツールセットが提供する「アクティブ化」スクリプトを入手してください。たとえば、Devtoolset 2を使用している場合、コマンドは次のようになります。
source /opt/rh/devtoolset-2/enable
または
source scl_source enable devtoolset-2
より効率的:フォーク爆弾やトリッキーなケースなし
答え2
代わりsource /opt/rh/devtoolset-4/enable
に
source scl_source enable devtoolset-4
上記のシェルスクリプトは、scl_source
ハードコーディングされたパス(他のシステムでは異なる場合があります)を使用するよりもエレガントです。ただし、使用量やその他の点でscl_source
行われる作業は少なくなります。/opt/rh/devtoolset-4/enable
scl_source
使用するにはscl_source
パッケージをアップグレードする必要があります。scl-utils
yum update scl-utils # old scl-utils versions miss scl_source
クイックコピーと貼り付け
echo 'source scl_source enable devtoolset-4' >> ~/.bashrc
# Do not forget to change the version ↑
好奇心旺盛な人のためのソースコード
ソースコードの例scl_source
:
https://gist.github.com/bkabrda/6435016
scl_source
Red Hat 7.1 にインストール済み
#!/bin/bash
_scl_source_help="Usage: source scl_source <action> [<collection> ...]
Don't use this script outside of SCL scriptlets!
Options:
-h, --help display this help and exit"
if [ $# -eq 0 -o $1 = "-h" -o $1 = "--help" ]; then
echo "$_scl_source_help"
return 0
fi
if [ -z "$_recursion" ]; then
_recursion="false"
fi
if [ -z "$_scl_scriptlet_name" ]; then
# The only allowed action in the case of recursion is the same
# as was the original
_scl_scriptlet_name=$1
fi
shift 1
if [ -z "$_scl_dir" ]; then
# No need to re-define the directory twice
_scl_dir=/etc/scl/conf
if [ ! -e $_scl_dir ]; then
_scl_dir=/etc/scl/prefixes
fi
fi
for arg in "$@"; do
_scl_prefix_file=$_scl_dir/$arg
_scl_prefix=`cat $_scl_prefix_file 2> /dev/null`
if [ $? -ne 0 ]; then
echo "Can't read $_scl_prefix_file, $arg is probably not installed."
return 1
fi
# First check if the collection is already in the list
# of collections to be enabled
for scl in ${_scls[@]}; do
if [ $arg == $scl ]; then
continue 2
fi
done
# Now check if the collection isn't already enabled
/usr/bin/scl_enabled $arg > /dev/null 2> /dev/null
if [ $? -ne 0 ]; then
_scls+=($arg)
_scl_prefixes+=($_scl_prefix)
fi;
done
if [ $_recursion == "false" ]; then
_i=0
_recursion="true"
while [ $_i -lt ${#_scls[@]} ]; do
_scl_scriptlet_path="${_scl_prefixes[$_i]}/${_scls[$_i]}/${_scl_scriptlet_name}"
source "$_scl_scriptlet_path"
if [ $? -ne 0 ]; then
echo "Can't source $_scl_scriptlet_name, skipping."
else
export X_SCLS="${_scls[$_i]} $X_SCLS"
fi;
_i=$(($_i+1))
done
_scls=()
_scl_prefixes=()
_scl_scriptlet_name=""
_recursion="false"
fi
答え3
問題は、scl enable devtoolset-1.1 bash
新しいbashシェルが作成されたことです。したがって、.bashrcに入れると、新しいシェルが作成されます。 .bashrcをロードし、実行しscl enable devtoolset-1.1 bash
、新しいシェルを作成し、.bashrcをロードします...Forkbomb!
.bashrcに次の内容を含めることができます。
if [ "$(gcc -dumpversion)" != "4.7.2" ]; then
scl enable devtoolset-1.1 bash
fi
または
if [ -z "$TRIEDSCLDEVTOOLSET" ]; then
export TRIEDSCLDEVTOOLSET=true
scl enable devtoolset-1.1 bash
fi
- 最初のものは、devtoolset-1.1にgcc 4.7.2が含まれていない限り、爆弾を爆発させ、デフォルトの環境にgcc 4.7.2がある場合は機能しません。
- 上記のように新しいシェルが作成されます。したがって、ターミナルウィンドウまたはSSHセッションを作成すると、2つのbashセッションになり、これを
exit
2回実行する必要があります。
答え4
すべてのユーザーに対してシステム全体で有効にします。/etc/profile
""で以下を修正してください。
source scl_source enable devtoolset-2