Автор Тема: Курилка. Болтаем о разном.  (Прочитано 714573 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2295 : 15.09.2021 08:37:28 »
Реклама гугл стала агрессивной. И кого-то это сильно достало:
https://news.ycombinator.com/item?id=23769504
https://layluh.com/features

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2296 : 17.09.2021 04:28:02 »
Линус Торвальдс про Linux на десктопе [на русском] [debconf14]
https://www.youtube.com/watch?v=8BNFACoLe_c

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2297 : 25.09.2021 13:25:10 »
Тут на форуме был разговор про, обрабатывается ли отсутсттвие 0A в конце последней строки. Говорили что обрабатывается. Лучше бы оно не обрабатывалось...

Программисты линукс, у вас с башкой в порядке?
Это не вывод, - это срань:
[altlinux@localhost ~]$ cat /etc/X11/profile.d/xdg-user-dirs.sh
#!/bin/sh
# Copyright (C) 2007 Red Hat, Inc. All rights reserved. This
# copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the
# GNU General Public License version 2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
if [ -x /usr/bin/xdg-user-dirs-update ]; then
    /usr/bin/xdg-user-dirs-update
fi[altlinux@localhost ~]$
$ hexdump -C /etc/X11/profile.d/xdg-user-dirs.sh | tail -n 5
000001e0  2d 75 70 64 61 74 65 20  5d 3b 20 74 68 65 6e 0a  |-update ]; then.|
000001f0  20 20 20 20 2f 75 73 72  2f 62 69 6e 2f 78 64 67  |    /usr/bin/xdg|
00000200  2d 75 73 65 72 2d 64 69  72 73 2d 75 70 64 61 74  |-user-dirs-updat|
00000210  65 0a 66 69                                       |e.fi|
00000214

Такой деликатный вопрос:
Какого хера? Вы что, основы программирования не в вузах, а в подвале проходили? Что за херня? Вы свой код хоть когда-нибудь проверяете? Или только по клавиатуре постучать?

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 89
Re: Курилка. Болтаем о разном.
« Ответ #2298 : 25.09.2021 14:01:15 »
А где оно обрабатывается или не обрабатывается? В чём вообще проблема? Сложно найти формальную грамматику Bourne Shell? (я не нашёл, но и не старался)$ sh -c "if [ 1 ]; then echo 1; fi"
1

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2299 : 25.09.2021 14:32:02 »
Если последняя строка не завершается 0A, интерпретатор должен был не найти fi в последней строке и выдать ошибку. Что тут неясного?
Последняя не имеет hex-кода перевода строки и приглашение шелл съезжает на выводе листинга. А если скрипт заканчивался бы длинным однострочником, оно нахер съехало бы на полэкрана. Очевидно, что вывод листинга должен быть нормальным. Всегда и без исключений.

В чём вообще проблема?

Глаза разуй и смотри вывод.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2300 : 25.09.2021 14:54:17 »
Очевидно, что cat делает только то что должен и не более:
[altlinux@localhost ~]$ $ cat 0A-enable
0A enable
[altlinux@localhost ~]$
$ hexdump -C 0A-enable
00000000  30 41 20 65 6e 61 62 6c  65 0a                    |0A enable.|
0000000a
[altlinux@localhost ~]$ cat 0A-disable
0A not enable[altlinux@localhost ~]$
$ hexdump -C 0A-disable
00000000  30 41 20 6e 6f 74 20 65  6e 61 62 6c 65           |0A not enable|
0000000d

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2301 : 25.09.2021 15:10:47 »
И more тоже врёт:
файл не заканчивается кодом перевода строки и more отображает не то что есть побайтно, - вывод не соответствует содержимому
[altlinux@localhost ~]$ more 0A-disable
0A not enable
[altlinux@localhost ~]$

И увидеть это можно только через дамп
$ hexdump -C 0A-disable
00000000  30 41 20 6e 6f 74 20 65  6e 61 62 6c 65           |0A not enable|
0000000d

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2302 : 25.09.2021 17:20:03 »
В чём правильность cat?
В том что пунктуально следуя управляющим кодам ascii таблицы, от первого байта до последнего, cat не проявляет самодеятельности и упорно выполняет то что и должен:
[altlinux@localhost ~]$ cat test.txt
description[altlinux@localhost ~]$
$ hexdump -C test.txt
00000000  6a 61 6d 62 73 20 6f 66  20 0d 64 65 73 63 72 69  |jambs of .descri|
00000010  70 74 69 6f 6e                                    |ption|
00000015

Впрочем как и sed:
[altlinux@localhost ~]$ sed "" test.txt
description[altlinux@localhost ~]$

Поэтому если требуется абсолютная точность вывода на stdout, использование cat и sed должно быть в высшем приоритете. Они следуют точности, с настырной пунктуальностью. И cat, и sed, не придумывают управляющий код в конце последней строки.

В отличие от.
« Последнее редактирование: 25.09.2021 17:42:27 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2303 : 25.09.2021 18:17:20 »
И more тоже врёт:
файл не заканчивается кодом перевода строки и more отображает не то что есть побайтно, - вывод не соответствует содержимому
[altlinux@localhost ~]$ more 0A-disable
0A not enable
[altlinux@localhost ~]$

И увидеть это можно только через дамп
$ hexdump -C 0A-disable
00000000  30 41 20 6e 6f 74 20 65  6e 61 62 6c 65           |0A not enable|
0000000d

more умеет взбрыкивать и похлеще:

more, ты нафига одну строку, внутри которой упраляющий код Carrige return, вывел как less? (скриншот) И куда ты дел вторую половину этой строки? И почему ты вывел в stdout всё прямо до наоборот?

Вообще-то, ты должен был:
- напечатать начало строки до управляющего кода.
- перевести курсор на начало строки.
- завершить печать строки
той частью строки, вместо которой, по Курсор вниз, ты вывел vvvvv, неверно обработав управляющий код:
...пропускается 1 строка
[altlinux@localhost ~]$

Это не две строки, - это одна строка:
$ hexdump -C test.txt
00000000  6a 61 6d 62 73 20 6f 66  20 0d 64 65 73 63 72 69  |jambs of .descri|
00000010  70 74 69 6f 6e                                    |ption|
00000015

И кстати:
wc верно выводит количество строк:
$ wc -l test.txt
0 test.txt

А нефига программистам-профессионалам в ascii файлах, в последней строке игнорировать ввод управляющего кода перевода строки.
Думаете что в файле 12 строк?
$ wc -l /etc/X11/profile.d/xdg-user-dirs.sh
12 /etc/X11/profile.d/xdg-user-dirs.sh

Щас. Аж бегом.
« Последнее редактирование: 25.09.2021 18:49:21 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 742
Re: Курилка. Болтаем о разном.
« Ответ #2304 : 26.09.2021 18:24:02 »
Теоретически, это всё надо было бы обвешивать багрепортами в апстриме. Но внедрять и повторять в каждом проекте эту простыню базовых основ, то ещё удовольствие. К тому же не совсем ясно, на что развешивать багрепорты. На код или на мозг программистов, который не освоил начала теории и взаимосвязь компонентов в системе в целом. Один не нажатый программистом Enter, а сколько проблем.

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 89
Re: Курилка. Болтаем о разном.
« Ответ #2305 : 27.09.2021 06:54:34 »
Если последняя строка не завершается 0A, интерпретатор должен был не найти fi в последней строке и выдать ошибку.
Соответственно, вот это:
$ sh -c "if [ 1 ]; then echo 1; fi"
должно привести к выводу сообщения об ошибке?
Это достаточно сильное заявление. Хотелось бы увидеть его обоснование формальной грамматикой (или чем определяется синтаксиc Bourne Shell).
« Последнее редактирование: 27.09.2021 07:00:51 от trs »

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 250
    • Email
Re: Курилка. Болтаем о разном.
« Ответ #2306 : 27.09.2021 09:07:18 »
Если последняя строка не завершается 0A, интерпретатор должен был не найти fi в последней строке и выдать ошибку.
Соответственно, вот это:
$ sh -c "if [ 1 ]; then echo 1; fi"
должно привести к выводу сообщения об ошибке?
Это достаточно сильное заявление. Хотелось бы увидеть его обоснование формальной грамматикой (или чем определяется синтаксиc Bourne Shell).
Это Posix соглашение. Строка без этого не может считаться полноценной строкой. И хоть сам bash по умолчанию не придерживается этого, тем не менее многие консольные утилиты именно так определяют строку. Что с незакрытой строкой приводит к ошибкам.

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 89
Re: Курилка. Болтаем о разном.
« Ответ #2307 : 27.09.2021 09:17:41 »
Это Posix соглашение. Строка без этого не может считаться полноценной строкой.
А bash то при чём? Вот в русском языке предложение -- это законченная мысль. На письме заканчивается точкой. К строкам и клеточкам в тетрадке это отношения не имеет. Так же и в других языках. В примере выше предложение заканчивается лексемой fi. Если в Python пробельные символы (к которым относится и переводы строки) несут особый смысл, это явно оговаривается на уровне описания грамматики.
« Последнее редактирование: 27.09.2021 09:20:55 от trs »

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 250
    • Email
Re: Курилка. Болтаем о разном.
« Ответ #2308 : 27.09.2021 10:39:25 »
А bash то при чём?
При том, что:
или чем определяется синтаксиc Bourne Shell
Вот именно этим и определяется синтаксис. Не грамматикой какого-то конкретного ЯП, а соглашениями более высокого уровня. POSIX есть из себя стандарт, многие программы в linux хоть и не полностью, но на него оглядываются.
И не надо напяливать рака на камень и приплетать разговорные языки, хотя и там строки значение имеют. В данном случае не имеют значения какие-то там мысли и лексемы. Разбор текста идёт от более крупных блоков к более мелким. Если файл не того типа или повреждён/неполон парсер прервёт его чтение. Если блок текста, в данном случае — строка не закрыт, то многие программы эту строку сочтут пустым местом и обрабатывать не будут (вне зависимости какими там лексемами оно заканчивается). И это нормальное поведение. Ибо в POSIX прописано определение строки. А в машинных текстах строка это очень даже себе конкретная сущность. Более высокого уровня, с бóльшим приоритетом, чем её содержимое.
« Последнее редактирование: 27.09.2021 11:28:32 от stranger573 »

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 89
Re: Курилка. Болтаем о разном.
« Ответ #2309 : 27.09.2021 13:37:35 »
Вот именно этим и определяется синтаксис. Не грамматикой какого-то конкретного ЯП, а соглашениями более высокого уровня. POSIX есть из себя стандарт, многие программы в linux хоть и не полностью, но на него оглядываются.
Вот действительно, "не надо напяливать рака на камень и приплетать" (ц) многие программы.

Надо показать формальное определение синтаксиса. Если есть некий стандарт, значит есть в нём пункт, в котором написано, что Bash shall и далее подтверждение Ваших слов. Пока из них следует вывод, что все однострочники не должны работать.

Насколько я понял из апелляции к "другим программам", суть проблемы в том, что кто-то решил разбирать скрипты при помощи cat, grep т.п. и у него ничего не вышло?
« Последнее редактирование: 27.09.2021 13:43:04 от trs »