функция bash для «обертывания» 7z

Похоже, что 7z не может писать в канал, поэтому я написал следующую функцию bash для эмуляции этой функциональности.

Я знаю, что это простая проблема, но это моя первая функция bash, и я чувствую, что очень легко написать ошибочный код в bash, поэтому любая обратная связь приветствуется.

function 7z2pipe () (
    local out_dir=$(mktemp -d)
    local out_file="${out_dir}"/temp.7z
    local log_file="${out_dir}"/"outz.txt"

    7z -p"weak_password" -mhe=on a "${out_file}" "$@" &> "${log_file}"
   
    if [ $? -ne 0  ]; then
        cat "${log_file}"
        return $?
    fi

    cat "${out_file}"
)

1 ответ
1

Вы хотите создавать постоянные временные файлы?

Обратите внимание, что в то время как настройки по умолчанию для mktemp поместите вещи в / tmp, чтобы он, в конечном итоге, собирал мусор, он не собирался немедленно. Что-то может сохраняться в / tmp в течение нескольких дней.

cat имеет код возврата

Я не уверен, почему возвращают код возврата из cat. Разве не имеет смысла возвращать код возврата из 7z?

Альтернативный код

    local return_code=$?
    if [ ${return_code} -ne 0]; then
        cat "${log_file}"
    else
        cat "${out_file}"
    fi

    rm -rf ${out_dir}
    return ${return_code}

В результате все останется в том виде, в котором вы их нашли, без дополнительных временных каталогов или файлов.

Он всегда будет возвращать код возврата из 7z.

Он выведет либо файл журнала, либо выходной файл, как вы это делали изначально.

Перенаправить на stderr

Я не уверен, что я бы поступил именно с твоим подходом. Альтернативой созданию файла журнала было бы перенаправление stdout к stderr.

    local out_file=$(mktemp --suffix .7z)
    7z -p"weak_password" -mhe=on a "${out_file}" "$@" 1>&2

    local return_code=$?

    cat "${out_file}"
    rm -f ${out_file}

    return ${return_code}

Теперь stdout будет содержать сжатый файл и stderr будет весь вывод команды.

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *