Checkinstall fail installing gnu gcc 6.2.0

Я отвечу на ваш общий вопрос о том, как делать множественные замены (в частности, при переименовании, хотя это может быть применимо и в других контекстах).  Предположим, что у вас есть куча файлов. имена которых включают слова "over" и "dog", и вы хотите заменить их на "under" и "cat", соответственно.

Грубая сила:

for f in *
do
    g=${f/over/under}
    h=${g/dog/cat}
    mv -- "$f" "$h"
done

(Правила -- защищают вас от нежелательного поведения которое может быть вызвано именем файла, начинающимся с --.  Если хотите, измените последнюю строку на mv -- "$f" "$h".jpg).  Обратите внимание, что если имя файла содержит только "over" или "dog" (но не оба), то будет произведена только одна из доступных замен.  Если имя содержит "dog" и "over" (в таком порядке), он все равно выполнит замену.  В представленном вами случае, когда строки содержат "(" и ")", вам может не понравиться такое поведение.

P.S. Реалистично, вам, вероятно, следует защитить команду mv следующим образом:

if [ "$f" != "$h" ]
then
    if [ -e "$h" ]
    then
        (Error handling)
    else
        mv -- "$f" "$h"
    fi
done

чтобы избежать получения сообщения об ошибке при попытке переименовать файл в сам себя (потому что его имя не содержит ни одной из строк), и чтобы избежать повреждения существующего файла. (например, если у вас есть файл image(1) и у вас уже есть файл image1.jpg).

с sed

for f in *
do
    g=$(sed 's/\(.*\)over\(.*\)dog\(.*\)/\1under\2cat\3/' <<< "$f")
    mv -- "$f" "$g"
done

Этот способ противоположен первому: он выполняет замену только в том случае, если слова "over" и "dog" оба появляются (в таком порядке) и не иначе.

Синтаксис <<< ("здесь строка") работает не во всех оболочках.  Чтобы сделать вышеописанное в оболочке, которая не поддерживает строки here, сделайте:

for f in *
do
    g=$(printf "%s" "$f" | sed 's/\(.*\)over\(.*\)dog\(.*\)/\1under\2cat\3/')
    mv -- "$f" "$g"
done
2
01.11.2016, 15:48
1 ответ

Это известная проблема. Иногда checkinstall нарушает установку из-за отсутствия папки. Он также (по какой-то причине) отказывается создавать новую папку, хотя у него есть необходимые разрешения для ее создания. В этом случае все, что вам нужно сделать, это создать папку вручную. В этом случае создайте папку /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0 и установите разрешение вручную.

sudo mkdir /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0

sudo chmod 644 /home/alexandre/gcc-6.2.0/lib/gcc/x86_64-pc-linux-gnu/6.2.0

Другая возможность заключается в том, что вы могли пропустить шаг настройки перед установкой. Пожалуйста, попробуйте выполнить конфигурирование с помощью

./configure --disable-static

, перекомпилировать его и установить с помощью checkinstall.

1
27.01.2020, 22:19

Теги

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