<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Доступен ShellCheck 0.9, статический анализатор для shell-скриптов</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html</link>
    <description>Опубликован выпуск проекта  ShellCheck 0.9, развивающего систему статического анализа shell-скриптов, поддерживающую выявление ошибок в скриптах с учётом особенностей bash, sh, ksh и dash. Код проекта написан на языке Haskell и распространяется под лицензией GPLv3. Предоставляются компоненты для интеграции с Vim, Emacs, VSCode, Sublime, Atom и различными интегрированными средами, поддерживающими GCC-совместимый вывод сведений об ошибках...&lt;br&gt;&lt;br&gt;Подробнее: https://www.opennet.ru/opennews/art.shtml?num=58394&lt;br&gt;</description>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (freehck)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#182</link>
    <pubDate>Mon, 02 Jan 2023 13:45:20 GMT</pubDate>
    <description>&amp;gt; и как ты на башпортянках реализуешь асинхронщину и параллельный взаимозависимый запуск служб?&lt;br&gt;&lt;br&gt;Ну так пойди и посмотри, как оно в Debian было сделано. И стартовало, между прочим, быстрее, чем стало после внедрения systemd.&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (Ноня)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#181</link>
    <pubDate>Sun, 01 Jan 2023 19:42:49 GMT</pubDate>
    <description>&amp;gt;Я бы не стал настаивать что он вот именно универсальный. &lt;br&gt;&lt;br&gt;Какой есть, универсальней особо нет. Язычок для управления программ, внезапно на котором при наличии достаточного числа этих самых программ можно написать что угодно, если надо.&lt;br&gt;&lt;br&gt;&amp;gt;Конкретный пример: написать HTTP сервер на шелле ну не то чтобы вообще совсем нельзя, но, поверьте, это крайне паршивая идея.&lt;br&gt;&lt;br&gt;inetd и готово, работать будет, причём такую портянку можно засунуть в роутер и будет не хуже дырок на пхп.&lt;br&gt;&lt;br&gt;Ето если про werc ещё не вспоминать, правда вот шелл там уже немножечко другой, но суть одна.&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (Аноним)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#180</link>
    <pubDate>Sun, 01 Jan 2023 15:36:44 GMT</pubDate>
    <description>Нет, это один файл. Я же написал, как повторить (когда я пытался воспроизвести на минимальном примере в прошлый раз, почему-то не получилось).&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (швондер)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#179</link>
    <pubDate>Sun, 01 Jan 2023 15:29:27 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; &quot;$&#123;fname&#125;&quot;/?(&quot;123&quot;)&quot;qwe&quot;$pext)&apos; &lt;br&gt;&amp;gt; ожидаемый результат выглядит вот так &lt;br&gt;&amp;gt; ~ $ bash -x ~/bin/shitsniffer3.sh 123 &lt;br&gt;&amp;gt; + file=123 &lt;br&gt;&amp;gt; + &#091;&#091; -n 123 &#093;&#093; &lt;br&gt;&amp;gt; + fname=123 &lt;br&gt;&amp;gt; + fpath=123 &lt;br&gt;&amp;gt; + &#091;&#091; -d 123 &#093;&#093; &lt;br&gt;&amp;gt; Сколько раз надо повторить, что дело не в файлах? Это уже 10 &lt;br&gt;&amp;gt; вроде.&lt;br&gt;&lt;br&gt;так у вас разные скрипты вызываются?&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (Аноним)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#178</link>
    <pubDate>Sun, 01 Jan 2023 12:19:30 GMT</pubDate>
    <description>Зачем мне это? Я накатил старые версии интерпретатора, которые есть в репах, и убедился, что у них всё нормально. Этого более чем достаточно. Но ладно&lt;br&gt;&lt;br&gt;https://ftp.gnu.org/gnu/bash/bash-5.2.15.tar.gz&lt;br&gt;&lt;br&gt;~ $ ./configure&lt;br&gt;~ $ make&lt;br&gt;~ $ ./bash -x ~/bin/bashextglob.sh 123&lt;br&gt;~/bin/bashextglob.sh: line 6: syntax error near unexpected token &#096;(&apos;&lt;br&gt;~/bin/bashextglob.sh: line 6: &#096;    fname=$(shopt -s failglob;shopt -s nocaseglob;echo &quot;$&#123;fname&#125;&quot;/?(&quot;123&quot;)&quot;qwe&quot;$pext)&apos;&lt;br&gt;&lt;br&gt;ожидаемый результат выглядит вот так&lt;br&gt;&lt;br&gt;~ $ bash -x ~/bin/shitsniffer3.sh 123&lt;br&gt;+ file=123&lt;br&gt;+ &#091;&#091; -n 123 &#093;&#093;&lt;br&gt;+ fname=123&lt;br&gt;+ fpath=123&lt;br&gt;+ &#091;&#091; -d 123 &#093;&#093;&lt;br&gt;&lt;br&gt;Сколько раз надо повторить, что дело не в файлах? Это уже 10 вроде.&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (швондер)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#177</link>
    <pubDate>Sun, 01 Jan 2023 11:49:52 GMT</pubDate>
    <description>&amp;gt; Этот код ни от чего не зависит, если он не интерпретируется. Не &lt;br&gt;&amp;gt; понимаю, что тонкого в ?(), если extglob -- это штатная функциональность &lt;br&gt;&amp;gt; баша? Я уже уже собирал баш 5.0_p18 и 5.1_p16-r2 -- в &lt;br&gt;&amp;gt; них нет ошибки синтаксиса, которая возникла сразу после размаскировки 5.2_p15 пару &lt;br&gt;&amp;gt; месяцев назад. Более ранние рассматривать нет смысла, в остальном коде присутствует &lt;br&gt;&amp;gt; максимально много башизмов, потому что только они позволяют писать профессиональный и &lt;br&gt;&amp;gt; устойчивый к ошибкам и уязвимостям код без лишних зависимостей (у которых &lt;br&gt;&amp;gt; будут свои особенности опять же). Конкретно приведённый код демонстрирует эту ошибку &lt;br&gt;&amp;gt; в 5.2_p15, её там быть не должно, либо $() вообще нельзя &lt;br&gt;&amp;gt; использовать нигде и никак.&lt;br&gt;&lt;br&gt;пруф должен выглядеть так:&lt;br&gt;mkdir test&lt;br&gt;cd test&lt;br&gt;mkdir dir&lt;br&gt;touch dir/&#123;имена_файлов_под_матч&#125;&lt;br&gt;~/src/bash-5.1/bash ~/src/script  - работает&lt;br&gt;~/src/bash-5.2/bash ~/src/script  - не работает&lt;br&gt;&lt;br&gt;&lt;br&gt;пока этого нет - говорить о регрессе бессмысленно.&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (Аноним)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#176</link>
    <pubDate>Sun, 01 Jan 2023 10:14:21 GMT</pubDate>
    <description>Этот код ни от чего не зависит, если он не интерпретируется. Не понимаю, что тонкого в ?(), если extglob -- это штатная функциональность баша? Я уже уже собирал баш 5.0_p18 и 5.1_p16-r2 -- в них нет ошибки синтаксиса, которая возникла сразу после размаскировки 5.2_p15 пару месяцев назад. Более ранние рассматривать нет смысла, в остальном коде присутствует максимально много башизмов, потому что только они позволяют писать профессиональный и устойчивый к ошибкам и уязвимостям код без лишних зависимостей (у которых будут свои особенности опять же). Конкретно приведённый код демонстрирует эту ошибку в 5.2_p15, её там быть не должно, либо $() вообще нельзя использовать нигде и никак.&lt;br&gt;</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (швондер)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#175</link>
    <pubDate>Sun, 01 Jan 2023 09:23:57 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;     echo &quot;# filename for $&#123;file&#064;Q&#125; changed to $&#123;fname&#064;Q&#125;&quot; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; file=&quot;$&#064;&quot; &lt;br&gt;&amp;gt; &#091;&#091; -n &quot;$&#123;file&#125;&quot; &#093;&#093; &amp;#124;&amp;#124; &#123; echo -e &quot;Usage:&#092;t$0 FILENAME&quot;; exit 1; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; fname=&quot;$&#123;file##*/&#125;&quot; &lt;br&gt;&amp;gt; fpath=&quot;$&#123;file&#037;/*&#125;&quot; &lt;br&gt;&amp;gt; &#091;&#091; -d &quot;$&#123;fname&#125;&quot; &#093;&#093; &amp;&amp; process_dirname&#091;/code&#093; &lt;br&gt;&amp;gt; Ещё раз, дело именно в синтаксической ошибке от $(?()) и не в &lt;br&gt;&amp;gt; чём-либо ещё.&lt;br&gt;&lt;br&gt;вы не поверите, но этот код зависит от файлов, которые находятся - или не находятся. Предлагаю собрать локально 5.2 и 5.1, и убедиться, что оба интерпретатора работают идентично, вызывая прямо ~/src/bash-5.1/bash ./script.sh и ~/src/bash-5.2/bash ./script.sh&lt;br&gt;Трюк с VAR=$(echo $VAR) это фактически аналог разыменовывания указателя, получения конкретного значения переменной, вместо вычисления переменной каждый раз. Именно для него вам понадобились здесь shopt. В тонком месте и порвалось, ни одно кодеревью этот код не прошел бы; но всё-таки, врядли дело в версии баш. прошу проверить через выполнение именно разными версиями, установленными локально.</description>
</item>

<item>
    <title>Доступен ShellCheck 0.9, статический анализатор для shell-ск... (Аноним)</title>
    <link>https://opennet.ru/openforum/vsluhforumID3/129363.html#174</link>
    <pubDate>Sat, 31 Dec 2022 18:11:53 GMT</pubDate>
    <description>Файл находится в 5.1 и не находится в 5.2? И при чём тут файл, если баш не пытается выполнять этот код, который ему не нравится? В этом у баша большая проблема, если ему что-то не нравится, приходится играть в угадайку. Технически этот код подстановки заранее неизвестного имени даже не использовался, потому что скрипту надо передать каталог вместо файла и это никогда так и не использовалось. Но, я уверен, что он корректный и всё работает, как и ожидалось, специально это проверил. Тут большая проблема, что extglob не работает корректно с &#064; в имени. Просто внезапно баш после обновления решил, что надо использовать обратные кавычки тут. Выглядит 100&#037; как баг, или регрессия.&lt;br&gt;&lt;br&gt;Вот полный пример кода, в котором $() не работает, но кавычки работают как и с 5.1.&lt;br&gt;&lt;br&gt;&#091;code&#093;#!/bin/env bash&lt;br&gt;&lt;br&gt;process_dirname()&#123;&lt;br&gt;    local pext=&apos;&#064;(*.mkv&amp;#124;*.mp4&amp;#124;*.avi)&apos;&lt;br&gt;    shopt -s extglob&lt;br&gt;    fname=$(shopt -s failglob;shopt -s nocaseglob;echo &quot;$&#123;fname&#125;&quot;/?(&quot;123&quot;)&quot;qwe&quot;$pext)&lt;br&gt;    &#091;&#091; 0 -ne $? &#093;&#093; &amp;&amp; echo &apos;#glob match failed&apos; &amp;&amp; </description>
</item>

</channel>
</rss>
