Можно использовать ifconfig.me в качестве альтернативы whatismyip.org.
curl -s http://ifconfig.me
Также ifconfig.me имеет некоторых дополнительных функциональный. Для обнаружения, какую информацию можно получить, посещают веб-сайт.
Это не о добавлении, что дополнительная новая строка в конце файла, именно о не удалении новой строки должна быть там.
Текстовый файл, под Unix, состоит из серии строк, каждая из которых заканчивается символом новой строки (\n
). Файл, который не пуст и не заканчивается новой строкой, является поэтому не текстовым файлом.
Утилиты, которые, как предполагается, воздействуют на текстовые файлы, не могут справиться хорошо с файлами, которые не заканчиваются новой строкой; исторические утилиты Unix могли бы проигнорировать текст после последней новой строки, например. Утилиты GNU имеют политику поведения прилично с нетекстовыми файлами, и также - большинство других современных утилит, но можно все еще встретиться с нечетным поведением с файлами, которые пропускают заключительную новую строку ¹.
С разностью GNU, если один из файлов, сравниваемых концы с новой строкой, но не другим, это старается отметить тот факт. Так как разность ориентирована на строку, она не может указать на это путем хранения новой строки для одного из файлов, но не для других — новые строки необходимы указать, где каждая строка в различном файле запускается и заканчивается. Таким образом, разность использует этот специальный текст \ No newline at end of file
дифференцировать файл, который не закончился в новой строке из файла, который сделал.
Между прочим, в контексте C исходный файл так же состоит из серии строк. Более точно единица перевода просматривается в определенном реализацией как серия строк, каждая из которых должна закончиться символом новой строки (n1256 §5.1.1.1). В системах Unix отображение просто. На DOS и Windows, каждая последовательность CR LF (\r\n
) отображается на новой строке (\n
; это - то, что всегда происходит при чтении файла, открытого как текст на этих Ose). Существует несколько Ose там, которые не имеют символа новой строки, но вместо этого зафиксировали - или записи переменного размера; в этих системах отображение от файлов до источника C представляет a \n
в конце каждой записи. В то время как это не непосредственно относится к Unix, это действительно означает, что, если Вы копируете исходный файл C, это пропускает его заключительную новую строку к системе с основанными на записи текстовыми файлами, затем скопируйте его назад, Вы или закончите с неполной последней строкой, усеченной в начальном преобразовании или дополнительной новой строке, прикрепляемой на него во время обратной конверсии.
¹ Пример: вывод вида GNU всегда заканчивается новой строкой. Таким образом, если файл foo
пропускает его заключительную новую строку, Вы найдете это sort foo | wc -c
сообщает еще один символ, чем cat foo | wc -c
.
Не обязательно причина, но практическое последствие файлов, не заканчивающихся новой строкой:
Рассмотрите то, что произошло бы, если бы Вы хотели обработать несколько использований файлов cat
. Например, если Вы хотели найти слово foo
в начале строки через 3 файла:
cat file1 file2 file3 | grep -e '^foo'
Если первая строка в file3 запускается с foo
, но file2 не имеет финала \n
после его последней строки это возникновение не было бы найдено grep, потому что последняя строка в file2 и первая строка в file3 будут рассматриваться grep как одна строка.
Так, для последовательности и для предотвращения неожиданностей, которые я пытаюсь сохранить своими файлами, всегда заканчивающимися новой строкой.
Существует два аспекта:
Существуют некоторые компиляторы C, которые не могут проанализировать последнюю строку, если она не заканчивается новой строкой. Стандарт C указывает, что файл C должен закончиться новой строкой (C11, 5.1.1.2, 2.) и что последняя строка без новой строки приводит к неопределенному поведению (C11, J.2, 2-й объект). Возможно, по историческим причинам, потому что некоторый поставщик такого компилятора был частью комитета, когда первый стандарт был записан. Таким образом предупреждение GCC.
diff
программы (как используемый git diff
, GitHub и т.д.), показывают линию за линией различия между файлами. Они обычно печатают сообщение, когда только один файл заканчивается новой строкой, потому что еще Вы не видели бы это различие. Например, если бы единственной разницей между двумя файлами является присутствие последнего символа новой строки, без подсказки было бы похоже, что оба файла были тем же, когда diff
и cmp
возвратите код выхода неравный успех и контрольные суммы файлов (например, через md5sum
) не соответствовать.
\ No newline at end of file
Вы добираетесь от GitHub, появляется в конце патча (в diff
формат, см. примечание в конце раздела "Unified Format").
Компиляторы не заботятся, существует ли новая строка или не в конце файла, но git
(и diff
/patch
утилиты), должны взять тех, которые в учетной записи. Существует много причин этого. Например, упущение добавить или удалить новую строку в конце файла изменило бы свой hashsum (md5sum
/sha1sum
). Кроме того, файлы являются не всегда программами и финалом \n
мог бы иметь некоторое значение.
Примечание: О предупреждении от компиляторов C я предполагаю, что они настаивают для заключительной новой строки в целях обратной совместимости. Очень старые компиляторы не могли бы принять последнюю строку, если не заканчивается \n
(или другая системно-зависимая последовательность символа конца строки).
Есть также смысл хранить различную историю. Если файл заканчивается без символа новой строки, то добавление чего-либо в конец файла будет рассматриваться утилитами diff как изменение последней строки (так как \n
добавляется к нему).
Это может привести к нежелательным результатам с помощью таких команд, как git blame
и hg annotate
.