Редактирование файла на месте с тройным поведением по-разному на разных юниксах - PullRequest
3 голосов
/ 04 марта 2011

Сотрудник экспериментировал с усечением файла в сценарии оболочки bash: извлечь два первых байта из двоичного файла.

Следующее работало нормально на BSD / OS X («12» в выводе), но не в Linux (вывод был пустым):

echo 1234 >test
head -c2 test | tee test >/dev/null

Изменение части head | tee для запуска в подоболочке

echo 1234 >test
(head -c2 test | tee test >/dev/null)

заставил его работать и в Linux.

Почему?

(Специально не заинтересован в решениях проблемы усечения, но объясняет, почему поведение отличается в разных версиях операционных систем.)

1 Ответ

1 голос
/ 04 марта 2011

tee открывает свои аргументы для записи, обрезая их в процессе, но, если head или tee откроет файл первым, остается на волю случая.Любое поведение является действительным;Вы просто не должны полагаться на этот мини-скрипт, делающий что-нибудь полезное.

...