1. bash / Говнокод #28235

    0

    1. 1
    2. 2
    3. 3
    #!/bin/sh
    
    [ ${SHELL} = "/bin/bash" ] || exit "Bash required!"

    Запостил: Stallman, 24 Июня 2022

    Комментарии (35) RSS

    • Ололо набашорк
      Ответить
    • (захлопал крыльями)
      Ответить
    • /bin/sh -> /bin/bash ?
      Ответить
    • БАШИЗМ НЕ ПРОЙДЕТ!
      БАШИЗМ НЕ ПРОЙДЕТ!
      БАШИЗМ НЕ ПРОЙДЕТ!

      Заебал этот ГНУшно-линуксовый шовинизм, если честно. Пишите код так, что бы он на любом позиксовом sh работал
      Ответить
      • А сишку ты в чём компилишь?
        Ответить
        • смотря где

          я действительно бывает использую gnu make и gcc, но стараюсь по максимуму писать платформонезависимо

          но конечно не всигда получается
          Ответить
    • Не, серьезно, а в чем багор??? Что не на баше это может и не исполниться?
      Ответить
      • да
        но не надо так
        Ответить
        • А как надо? Если, допустим, я не хочу поддерживать совместимость со всем-всем, но чтобы на других системах оно всё-таки разумно падало, а не вылетало с непонятными ошибками?
          Ответить
          • ну тогда ты всесделал правильно

            а что из баш-спесифик ты использовал?
            Ответить
            • Так в этом-то и вопрос. Я не настоящий пингвин.
              Ответить
              • А маску сварщика ты в Екатеринбурге через «Авито» нашёл?
                Ответить
              • Пиши максимаально кросс-платформенно.
                Используй башизмы только если необходимо.

                И если уж используешь, то конечно проверяй (как ты и сделал)

                ну либо забубень баш в шебанг
                #!/bin/bash

                Кстати, если в коде есть бошизм, то в шебанг точно нужно указать баш, потому что на прыще могут быть обычный sh и рядом bash, так что лучше явно попросить баш
                Ответить
                • хочу что-то, что запустится и на винде и на линуксе
                  Ответить
                  • тогда пиши на go, чувак
                    Ответить
                    • Я же не пидор
                      Ответить
                      • Тогда пиши на С, и собирай CMakeом

                        Он тебе сгенерит cproj, и ты соберешь его VC
                        Он же сгенерит тебе Makefile, и ты соберешь его gcc

                        У тебя будут два нативных бинаря под Linux и windows, и всё будет заебись

                        Я мог бы еще посоветовать всякие mingw, но ты заранее предупредил, что ты не пидор.

                        Учти, что ничего сложнее лабы ты всё равно в рамках чистого ANSI C не напишешь, а значит придется дергать API операционок, а делать кондишенал компилешен.

                        Либо можно взять С++, там чуть больше всего в стандартной либе
                        Ответить
                        • Пидорство — писать под JVM и под CLR. А mingw — очень тонкая прослойка, её почти не видно.
                          Ответить
                          • Ничего себе тонкая

                            Разве там не эмулят позиксовый апи поверх виндового?

                            то есть у тебя конечно PE получается (в отличие от цигвина) но в том PE у тебя код-то все равно под юникс, или я путаю?
                            Ответить
                            • Есть несколько вариантов толщины:
                              1. Cygwin — самый толстый. Мумулирует почти всё.

                              2. MSYS — почти как Cygwin, но полегче. Не стали мумулировать то, что заняло бы много ресурсов.

                              3. Голый mingw без MSYS — по толщине сопоставим с CRT MSVC или Борманда. Т. е. для лаб годится. Но Мац умудрился под него Руби скомпилировать, не прибегая к MSYS и тем более к Cygwin.

                              В общем, смотреть нужно, что именно из позиксового API поддерживается каждым рантаймом.
                              Ответить
                              • Так MRI под винду небось и работает как говно, не?

                                Просто невозможно написать высокоперформансый код в ОСЬ-АГНОСТИК стиле


                                Навязжий в зубах уже пример это async io
                                * kqueue на бзд
                                * epoll на Linux
                                * CompletionPorts на Windows

                                С сипайтоне они это сделали, nodejs сделал это на libuv и пр.

                                А еще многотредовать, а еще всякие API для работы с дисковым IO...
                                Ответить
                                • Надо покопаться в исходниках MRI...
                                  Ответить
                                • > Просто невозможно написать высокоперформансый код в ОСЬ-АГНОСТИК стиле

                                  ХЕРНЯ.
                                  Если твой код делает некоторую числодробительную хуйню, например у тебя библиотека, которая перемножает матрицы, ей на ОС примерно насрать. Для многопоточности есть кроссплатформенный OpenMP.

                                  А всякое там IO тебя вообще не ебет т.к.
                                  1. Это уже не проблема твоей библиотеки
                                  2. Это не боттлнек
                                  Ответить
                            • В цигвине тоже PE, но он тянет за собой многомегабайтную cygwin1.dll.
                              Ответить
                            • printf — это позиксовый интерфейс, так? Но при этом он есть в стандартной библиотеке любого сишного компилятора.

                              А вот если захочешь форкать или симлинкать, то тебе нужен рантайм потолще.
                              Ответить
                              • ну блин, очевидно я говорил о том, что есть только в позиксе, а не в стандартной библиотеке няшной

                                Например про write, про питреды, про форк, и прочее isatty
                                Ответить
                                • Ты помнишь, мы обсуждали, что порт гита на Windows не умеет работать с симлинками?

                                  Голый mingw их не поддерживает, нужно дёргать API ОС. Авторам гита не понравилось, что операционки до Висты не поддерживают новые симлинки, они поддерживают только directory junctions, а совсем старые операционки и junctions не поддерживают.

                                  MSYS поддерживает симлинки, но не виндовые, а... собственную мумуляцию. Он создаёт маленький файл с сигнатурой вроде <!symlink>, в котором лежит ссылка на оригинал. Естественно, программы, которые собраны не с MSYS, а с другим рантаймом, воспринимают такие костыли не как симлинк, а как мусор. Этот вариант тоже не понравился авторам гита, хотя они и использовали MSYS при портировании на Винду.
                                  Ответить
                                  • с симлинками на пинде беда

                                    Там есть джанкшены (но только для папок) и есть симлинки на основе репрс поинтс но не работает без юак
                                    Ответить
                  • Ищи вирус «Winux».

                    Ещё бывают скрипты-полиглоты, которые могут выполняться несколькими интерпретаторами.
                    Ответить

    Добавить комментарий