Почему запись в файл меняет содержимое (ha sh)? - PullRequest
3 голосов
/ 26 мая 2020

Я заметил, что при попытке сгенерировать некоторые хэши после их копирования и вставки в файл с помощью vim, ha sh не такой, каким должен быть. То же самое, когда файл был открыт и записан. Такое же поведение с nano, поэтому должно быть что-то, что я ошибаюсь.

$ echo -n  "foo" | openssl dgst -sha256
2c26...e7ae
$ echo -n "foo" > hash.txt
$ openssl dgst -sha256 hash.txt
SHA256(hash.txt)= 2c26...e7ae

Но когда я открываю ha sh .txt с помощью nano или vim и выхожу, ничего не вставляя, я получаю следующее ha sh: b5bb...944c

Я также заметил, что без открытия файла и записи я не вижу вывода при использовании cat или head. Была ли изменена кодировка?

1 Ответ

4 голосов
/ 27 мая 2020

Большинство текстовых редакторов, включая Vim, сохраняют файл с новой строкой в ​​конце при выходе. Это потому, что в соответствии с POSIX текстовый файл либо пуст, либо заканчивается новой строкой, поэтому большинство пользователей ожидают и хотят этого поведения.

Как вы заметили, добавление новой строки в конце изменяет ha sh, а полученное ha sh согласуется с последовательностью foo\n, где \n - это новая строка.

Если у вас достаточно недавний Vim, вы можете контролировать поведение, упомянутое выше установив nofixeol, что сохранит существующее окончание строки или его отсутствие на последней строке.

...