<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Bash экранированние</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html</link>
    <description>Всем здравствуйте. Хочется критики, суть такая, есть lua (не хихикать) скрипт например который через io.popen() выполняет одни команды читая вывод и опять через io.popen() передаёт этот вывод как ввод другой команде, вроде всё просто.  Но хочется чтобы даже в теории не было так (из за бага/просто кривых рук/положения Венеры в созвездии стрельца) что ввод одной команды попав в popen() как есть не исполнился, чтобы данные были только данными и никак не обрабатывались оболочкой (не исполнялись команды, не обрабатывались спецсимволы оболочки).&lt;br&gt;&lt;br&gt;Хорошо, тут вот  https://www.opennet.ru/docs/RUS/bash_scripting_guide/c1833.html  указано про экранирование в одинарные кавычки с учётом вложенных ежели таковые имеются. Теперь данные это просто данные и не происходит никакой магии, единственное что если эти данные например &apos;pwd&apos; будут исполнены попав в оболочку, но подумалось что если добавить тупо пробел то что угодно типа &apos;rm &apos; уже ну никак не сможет быть исполнено так как оболочка будет искать в PATH как есть вместе </description>

<item>
    <title>Bash экранированние (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#8</link>
    <pubDate>Mon, 07 Oct 2024 11:17:44 GMT</pubDate>
    <description>&amp;gt;пробел в конце&lt;br&gt;&lt;br&gt;Тебе не нужен пробел в конце, если ты заэкранировал каждый аргумент и гарантированно контролируешь первое слово в команде. Лучше озаботься валидацией вот этого первого слова-команды.&lt;br&gt;&lt;br&gt;Если ты вызываешь стандартные утилиты, которые понимают -- как запрет чтения флагов, выставляй -- перед данными.&lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#7</link>
    <pubDate>Mon, 07 Oct 2024 11:12:08 GMT</pubDate>
    <description>Хочу похихикать.&lt;br&gt;&lt;br&gt;&amp;gt;через io.popen()&lt;br&gt;&lt;br&gt;Родина дала им execl - на, пользуйся! Не хочу, хочу popen!&lt;br&gt;В следующий раз пользуйся тем, у чего есть execl/v()/spawnl/v(). Потому что кто-то (может, даже ты) обязательно не будет экранировать ввод и засунет в popen что не надо.&lt;br&gt;&lt;br&gt;&amp;gt;есть ли подвох?&lt;br&gt;&amp;gt;text:gsub(&quot;&apos;&quot;, &quot;&apos;&#092;&#092;&apos;&apos;&quot;)&lt;br&gt;&lt;br&gt;Частично есть. Никогда не обрабатывай на самом деле структурированные (массив, ага) строковые данные с помощью инструментов манипуляции строк. Все эти gsub, split и strip сразу на помойку, если это что-то сложнее базового CSV (и то для CSV в AWK придумали режим). Это что-то типа парсинга HTML регулярками.&lt;br&gt;&lt;br&gt;В popen ты должен совать именно сджойненный массив экранированных слов. Экранируешь каждый аргумент, а не всю строку. И вот тогда, когда у тебя внутри escape будет целый аргумент как строка, можешь использовать gsub.&lt;br&gt;&lt;br&gt;Короче, сделай себе на popen popenl, который будет принимать МАССИВ и его экранировать по отдельности и будет тебе счастье.&lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (мяв)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#6</link>
    <pubDate>Mon, 07 Oct 2024 10:33:03 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; Есть ли подвох?&lt;br&gt;&amp;gt; P.S Да я знаю про пайпы просто шела &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; app1 &amp;#124; app2 &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; Но, не все программы умеют читать из стандартного ввода, промежуточные данные могут &lt;br&gt;&amp;gt; быть как-то в середине модифицированы (для этого lua мне и нужна) &lt;br&gt;&amp;gt; вызовы через popen это просто взять данные в одном месте, обработать &lt;br&gt;&amp;gt; на lua, передать дальше. И вот про это &quot;передать&quot; я вот &lt;br&gt;&amp;gt; балакаю :) &lt;br&gt;&lt;br&gt;если башизмов не боитесь - printf &quot;&#037;q&quot; &apos;ЧтоУгодно&apos;&lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (Neon)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#5</link>
    <pubDate>Sun, 14 Apr 2024 18:46:27 GMT</pubDate>
    <description>&amp;gt; man xargs &lt;br&gt;&amp;gt; Никогда не надо ничего дергать изнутри программы.&lt;br&gt;&lt;br&gt;Тогда не будет целого пласта программ. Которые внутри себя запускают другие программы&lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#4</link>
    <pubDate>Sat, 16 Mar 2024 18:10:14 GMT</pubDate>
    <description>man xargs&lt;br&gt;Никогда не надо ничего дергать изнутри программы. &lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (Hello)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#3</link>
    <pubDate>Fri, 15 Mar 2024 10:43:23 GMT</pubDate>
    <description>Строки конвертируй в hex.&lt;br&gt;</description>
</item>

<item>
    <title>Bash экранированние (LINUXORGRU)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#2</link>
    <pubDate>Fri, 15 Mar 2024 09:59:23 GMT</pubDate>
    <description>&amp;gt; юзай экспорт и энвирон&lt;br&gt;&lt;br&gt;Из коробки в lua нет setenv только getenv, не ну можно через luajit FFI дёрнуть, но хочется любую луа без ограничений от 5.1 и до победного, короче без всяких особенностей. &lt;br&gt;&lt;br&gt;Но, через переменные окружения конечно в целом тоже вариант, но мне больше в данный момент интересно является ли обрамление в (плюс экранирование внутренних) одинарные кавычки плюс пробел в конце (ну или в начале или и там и там не суть) достаточным, вроде по логике да.&lt;br&gt;&lt;br&gt; 1 - одинарные кавычки делают из строки реально просто строку и всё &quot;как-есть&quot; байтовый блоб&lt;br&gt; 2 - пробел в конце гарантированно ломает попытку шелла исполнить такое &apos;ls &apos; так как таких исполняемых файлов не существует (если не создать специально) для надёжности можно так &apos; ls &apos; если данные нужны без них можно внутри принимающей программы просто по дефолту игнорировать первый и последний символы и всё (на это я могу пойти), больше важен именно интерфейс туда/сюда, простой и надёжный как тапка. &lt;br&gt; &lt;br&gt;И всё, и вроде как все проблемы решены раз</description>
</item>

<item>
    <title>Bash экранированние (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID10/5669.html#1</link>
    <pubDate>Fri, 15 Mar 2024 09:14:47 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; Есть ли подвох?&lt;br&gt;&amp;gt; P.S Да я знаю про пайпы просто шела &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; app1 &amp;#124; app2 &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; Но, не все программы умеют читать из стандартного ввода, промежуточные данные могут &lt;br&gt;&amp;gt; быть как-то в середине модифицированы (для этого lua мне и нужна) &lt;br&gt;&amp;gt; вызовы через popen это просто взять данные в одном месте, обработать &lt;br&gt;&amp;gt; на lua, передать дальше. И вот про это &quot;передать&quot; я вот &lt;br&gt;&amp;gt; балакаю :) &lt;br&gt;&lt;br&gt;юзай экспорт и энвирон, таблицу эскейпов я тебе не вспомню, сам хочу запилить экранизатор, в сторону printf &#037;q посмотри еще&lt;br&gt;</description>
</item>

</channel>
</rss>
