Как постоянно включить scl CentOS 6.4?

Один способ использовать sort + awk. Я сортирую другой файл по его первому числу и в стабильном режиме. В awk Я сравниваю то, чему ключи от file1 соответствуют ключам file2 и не повторяются, печатая их:

sort -snk1,1 file1 | awk '
    FNR == NR { 
        keys[ $1 ] = 1; 
        next; 
    } 
    !values[ $2 ] && keys[ $1 ] { 
        printf "%s\n", $2; 
        values[ $2 ] = 1; 
    }
' file2 -

Вывод:

5000
300
500
3000
35
05.02.2018, 16:25
4 ответа

В вашем ~ / .bashrc или ~ / .bash_profile Просто исходное сценарию «Включить», снабженный DevToolset. Например, с Devtoolset 2, команда:

source /opt/rh/devtoolset-2/enable

или

source scl_source enable devtoolset-2

гораздо более эффективно: нет Forkbomb, без сложной оболочки

67
27.01.2020, 19:36
 find . -iname foo.txt -printf '%CYmd %p%f' | sort -n -t ' ' -k 2 | head -n 1
-121--73379-

Проблема заключается в том, что scl enable devtoolset-1.1 bash создает новую оболочку bash. Поэтому, когда вы кладете его в ваш .bashrc, он создает новую оболочку... которая загружает ваш .bashrc, который работает scl enable devtoolset-1.1 bash , который создает новую оболочку, которая загружает ваш .bashrc... Форкбомба!

Вероятно, вы хотите что-то подобное в вашем .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-сеанса необходимо будет выполнить два сеанса bash и дважды выйти .
4
27.01.2020, 19:36

Альтернативой 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

Quick copy-paste

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
13
27.01.2020, 19:36

За включение его в системах для всех пользователей. Внесите изменения в «/etc/profile», как показано ниже :

.
source scl_source enable devtoolset-2
0
18.12.2020, 16:49

Теги

Похожие вопросы