Почему только один вывод команды 'cat' идет с переносом строки? - PullRequest
0 голосов
/ 08 января 2020

Поскольку моя репутация слишком низкая для публикации изображения, я воспроизведу вывод терминала, откуда мой вопрос возник из:

username@computer:/run$ cat rsyslogd.pid 
599username@computer:/run$ cat acpid.pid 
636
username@computer:/run$

cat acpid.pid с переводом строки, тогда как cat rsyslog.pid - нет.

Но если я открою оба файла, видимой разницы нет (например, файл acpid.pid не имеет дополнительной пустой строки)

Вопрос: почему один .pid файл поставляется с переносом строки, а другой нет?

Дополнительная информация: Моя операционная система - Ubuntu 18.04.3

1 Ответ

0 голосов
/ 08 января 2020

Файл rsyslogd.pid, вероятно, не заканчивается символом новой строки (ASCII 0x0A).

Вы не упоминали, как открывали файлы, но, я подозреваю, вы использовали текстовый редактор, который будет не отображать непечатаемые символы (например, перевод строки и возврат). Вместо использования текстового редактора попробуйте просмотреть необработанный файл с помощью инструмента hexdump. Затем сравните шестнадцатеричные значения с таблицей ASCII. Я думаю, вы обнаружите, что непечатные символы после 599 и 636 отличаются.

hexdump -C rsyslogd.pid
hexdump -C acpid.pid

Следующая последовательность команд воспроизводит ваш вывод. Ключом является использование флага -n для команды echo для создания файла без символа новой строки в конце.

$ echo -n test > file_no_new_line.txt
$ echo test > file_with_new_line.txt
$ cat file_no_new_line.txt
test$ cat file_with_new_line.txt
test
$

Вот вывод hexdump для двух файлов, показанных в моем примере.

$ hexdump -C file_no_new_line.txt
00000000  74 65 73 74                                       |test|
00000004
$ hexdump -C file_with_new_line.txt
00000000  74 65 73 74 0a                                    |test.|
00000005
$

Вывод команды, в данном случае из cat, и приглашение оболочки ($), работающие друг с другом, также зависят от оболочки. Если поведение невозможно воспроизвести с помощью описанных выше шагов, попробуйте другую оболочку (например, / bin / sh)

...