Проблема с настройкой скрипта - PullRequest
1 голос
/ 03 января 2011

У меня проблема со скриптом ./configure для ffmpeg. Моя среда linux использует busybox, который допускает только ограниченный набор команд linux. Одна команда, которая используется в сценарии ffmpeg ./configure, - mktemp -u, проблема в том, что busybox для linux не распознает ключ -u как действительный, поэтому он жалуется на это и прерывает процесс настройки.

Это соответствующий код в ./configure, который использует команду mktemp -u:

if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
        die "Unable to create temporary file in $TMPDIR."
    append TMPFILES $tmp
    eval $1=$tmp
}

Я вообще плохо разбираюсь в bash-скриптинге, поэтому мне было интересно, есть ли у кого-нибудь идея о том, как заставить этот скрипт конфигурации не использовать mktemp -u и использовать альтернативу 'replace' вариант, который доступен в соответствии с фрагментом выше. Спасибо.

кстати ... простое удаление переключателя -u не работает. Также не заменяя его на -t или -p. Я считаю, что mktemp нужно полностью обойти.

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Изменить это:

if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

К этому:

#if ! check_cmd type mktemp; then
if true; then # Force the use of mktemp()
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

Вы можете альтернативно удалить все конструкции if fi, чтобы осталось только определение mktemp(), но я бы предпочел оставить их как способ запомнить, что нужно сделать, и в случае необходимости вернуться.

1 голос
/ 03 января 2011

Я бы просто изменил скрипт настройки, чтобы сбросить параметр -u на mktemp и удалить set -C; (который устанавливает режим без синхронизации и требует отсутствия файла; удаление -u означает, что вам также необходимо удалить set -C).

Справочные страницы MacOS X для mktemp (1) скажем:

-u Работа в «небезопасном» режиме. Временный файл будет удален до выхода из mktemp. Это немного лучше, чем у mktemp (3), но все равно вводит условие гонки. Использование эта опция не рекомендуется.

Сгенерированное имя файла не связано mktemp, а затем немедленно воссоздано сценарием настройки, что немного глупо. Удаление -u означает, что имя файла уже будет существовать, поскольку оно было безопасно создано.

Если вы часто будете использовать программное обеспечение, сообщите об этом разработчику или сопровождающему.

...