klink0v (klink0v) wrote,
klink0v
klink0v

Categories:

Я худею с вашего говнокода

Потерял почти целый рабочий день на одном странном затыке.

Задача. У нас есть обычный текстовый файл, в нем N строчек. Нужно запустить некоторое приложение также N раз, передав ему в качестве параметра очередную строчку из упомянутого файла. Казалось бы, что может быть проще?

Всё прекрасно работает, как и ожидалось. Но теперь вместо somecommand берём некую Javaписьную утилиту. В моём конкретном случае это будет клиент для Jenkins-а. Примерно вот так (там надо ещё кой-какие переменные окружения в начале прописать, но суть не в этом).

...и с удивлением обнаруживаем, что этот цикл всегда выполняется ровно один раз независимо от количества строк в файле "somefile.txt".

Почему? Вот на выяснение этого я и потратил кучу времени. Оказывается, эта долбаная софтина по имени "jenkins-cli.jar" каким-то образом умудряется перехватить стандартный ввод (STDIN) у шелла, в котором выполняется цикл. Поэтому read внутри while читает первую строчку из файла somefile.txt, все остальные строчки забирает Javaписьный апплет при первом же проходе цикла, хотя логика его работы ни разу не предполагает ничего получать со стандартного ввода. А на следующем (втором) проходе цикла оператор read получает хрен EOF, и цикл заканчивается.

Причём такое происходит только с этой одной конкретной отдельно взятой программой. Если внутри цикла вызывать, например, просто "/usr/bin/java -version", то всё нормально.

В процессе своих экспериментов я чего только не перепробовал. И отдельные subshell-ы плодить, и по-хитрому ввод-вывод подменять, и вызывать через "/bin/bash -c блаблабла". Ничего не помогает. Вообще ничего. Перехватывает стандартный ввод у цикла, скотина такая, и всё тут. А сработало в итоге вот так:

И меня слов других нет кроме бранных. Вот скажите, как это прикажете называть? И как они вообще это сделали? Говнокод в полный рост, я просто худею. На ровном месте "влетел" в совершенно непонятный косяк. За всю свою практику в первый раз с таким пидорством столкнулся. Java, хуле.

Tags: bash, it, java, ненависть, работа
Subscribe

  • ОколоITшный дыбр #70

    ... Вчера (9 октября) роскомпозор (чтоб его мухи съели) в очередной раз выкатил обновленную прошивку на свои ТСПУ. Судя по некоторым внешним…

  • Dehydrated + WildCard Lets Encrypt

    Возникла тут надобность по-быстрому наколдовать Wildcard X509-сертификат для одного домена. Покупать и ждать пока проплатят времени / возможности не…

  • Великое китайское #2

    Продолжение предыдущего поста. На этот раз больше про OpenVPN и немного нытья. Наткнулся в этих ваших интернетах на интересный фолиант. Некие…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 23 comments

  • ОколоITшный дыбр #70

    ... Вчера (9 октября) роскомпозор (чтоб его мухи съели) в очередной раз выкатил обновленную прошивку на свои ТСПУ. Судя по некоторым внешним…

  • Dehydrated + WildCard Lets Encrypt

    Возникла тут надобность по-быстрому наколдовать Wildcard X509-сертификат для одного домена. Покупать и ждать пока проплатят времени / возможности не…

  • Великое китайское #2

    Продолжение предыдущего поста. На этот раз больше про OpenVPN и немного нытья. Наткнулся в этих ваших интернетах на интересный фолиант. Некие…