lz4 управляют выводами к stdout неожиданно

Используя эту команду lz4:

$ apt search ^lz4$
Sorting... Done
Full Text Search... Done
lz4/focal,now 1.9.2-2 amd64 [installed,automatic]
  Fast LZ compression algorithm library - tool

$ lz4 --version
*** LZ4 command line interface 64-bits v1.9.2, by Yann Collet ***

Эта команда обычно создает имя файла lz4 файл (точно так же, как gzip делает):

$ lz4 -9 -k filename

Однако эта команда не делает и вместо этого пишет в stdout, когда я не говорю это:

$ t=$(lz4 -9 -k filename)
Warning : using stdout as default output. Do not rely on this behavior: use explicit `-c` instead ! 
bash: warning: command substitution: ignored null byte in input

, Почему это делает это? Действительно ли это - ошибка или является там причиной, зарегистрированной где-нибудь?

4
задан 10 March 2021 в 15:26

1 ответ

Поведение, кажется, является функцией - не ошибка. Я не могу найти его документированным нигде, кроме как в исходном коде :

/* No output filename ==> try to select one automatically (when possible) */
while ((!output_filename) && (multiple_inputs==0)) {
    if (!IS_CONSOLE(stdout)) {
        /* Default to stdout whenever stdout is not the console.
         * Note : this policy may change in the future, therefore don't rely on it !
         * To ensure `stdout` is explicitly selected, use `-c` command flag.
         * Conversely, to ensure output will not become `stdout`, use `-m` command flag */
        DISPLAYLEVEL(1, "Warning : using stdout as default output. Do not rely on this behavior: use explicit `-c` instead ! \n");
        output_filename=stdoutmark;
        break;
        .
        .
}

на Linux, IS_Console использует isatty , чтобы определить, подключены ли файловые Dessctors к Терминал.

Как предложено в комментарии, вы можете использовать опцию -M -M , чтобы заставить генерацию выходного файла в тех случаях, когда нет TTY:

t=$(lz4 -9 -k -m filename)
2
ответ дан 18 March 2021 в 23:27

Другие вопросы по тегам:

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