Функция для проверки, был ли файл изменен

Прямую совместимость гарантировать гораздо легче, чем обратную. Если ваша библиотека зависит только от среды выполнения C (glibc6), то ответ будет где-то между "вероятно" и "возможно". Если она зависит от дополнительных библиотек, вероятность успеха гораздо ниже (серьезно, никто не полагается на обратную совместимость бинарных пакетов). Но если вы хотите повысить шансы, компиляция и сборка библиотеки на более старом релизе очень помогает.

1
04.08.2018, 17:07
2 ответа

"How can I write redirection to be unnoticed to other part of shell command line?"

Ничего делать не нужно, предупреждение на stdErr. Попробуйте это:

apt list adghdgd | grep.
2>/dev/null apt list adghdgd | grep.

Если ваш дистрибутив раскрашивает grep по умолчанию, вы увидите, что часть, которая фактически попадает в grep, окрашивается. Во второй форме stdErr полностью подавляется.

Grep тоже ведет себя иначе, сравните:

echo hello | grep.
echo hello | grep. | cat

Вторая форма не окрашена, потому что grep замечает, что ее stdOut — это не терминал, а конвейер. Откуда он/она знает????

Сравните

ls -l /proc/self/fd/1
( ls -l /proc/self/fd/1 ) | cat

В первой форме stdOut — это tty/pts. Во втором труба.

0
27.01.2020, 23:31

apt исторически разрабатывался с учетом использования строки интерактивной команды -, отсюда и закодированное предупреждение, которое было сделано намеренно в/с помощью apt, а не оболочкой.

Однако aptне обязательно анализирует командную строку; оболочка уже выполнила эту работу к моменту вызова apt. Что делает apt, так это обнаруживает, что поток stdoutбыл изменен/перенаправлен.

Что касается использования aptв сценариях, у вас есть похожая старая команда apt-get, которая делает примерно то же самое и не выдает этого предупреждения при перенаправлении stdout.

TLDR Не оболочка записывает сообщение об ошибке в stderr, это команда apt.

Тот факт, что вы можете захватить выводaptstderrв оболочке, является артефактом того, что Unix является многозадачной ОС, и не означает, что этот вывод производит оболочка.

ПС. Выполняя strace по команде, видно aptпишет это сообщение:

strace apt get install bash > a
....
write(2, "\n", 1
)                       = 1
write(2, "WARNING: ", 9WARNING: )                = 9
write(2, "apt", 3apt)                      = 3
write(2, " ", 1 )                        = 1
write(2, "does not have a stable CLI inter"..., 38does not have a stable CLI interface. ) = 38
write(2, "Use with caution in scripts.", 28Use with caution in scripts.) = 28
write(2, "\n", 1
)                       = 1
write(2, "\n", 1
)                       = 1
2
27.01.2020, 23:31

Теги

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