<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT + BASH: Два в одном]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=11535</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=11535&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT + BASH: Два в одном».]]></description>
		<lastBuildDate>Tue, 17 May 2016 10:39:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT + BASH: Два в одном]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103873#p103873</link>
			<description><![CDATA[<p>Поправил вариант 2 (апострофы вокруг начального маркера heredoc) и вариант 3 (апостроф вместо кавычек в строках 2 и 8). С этими изменениями эти способы стали лучше. </p><p>Если кому надо, могут использовать вариант 2, как самый прстой и наиболее универсальный.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 17 May 2016 10:39:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103873#p103873</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT + BASH: Два в одном]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103167#p103167</link>
			<description><![CDATA[<p><strong>Вариант 3</strong><br />-- Первая строка для cmd - метка и текст, который игнорируется при исполнении. В конце строки стоит циркумфлекс/карет/крышечка (^), символ продолжения строки, который фактически рассматривает следующую строку как продолжение первой. Далее следует вызов bash. <br />-- Для bash первая строка - пустая команда, вывод в nul и коментарий. Далее следует echo, печатающий также все в null. <br /></p><div class="codebox"><pre><code>
: &gt; /dev/null # ^
echo &#039; &gt; nul
@echo off
echo:==== cmd
bash &quot;%~f0&quot; %*
echo:==== cmd again
goto :eof
&#039; &gt; /dev/null

echo &quot;==== bash&quot;
for n in &quot;$@&quot; ; do echo &quot;$n&quot; ; done
exit
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 28 Apr 2016 00:13:07 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103167#p103167</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT + BASH: Два в одном]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103125#p103125</link>
			<description><![CDATA[<p>В дополнение 	к теме <a href="http://forum.script-coding.com/viewtopic.php?id=10114">Коллекция скриптов и идей → CMD/BAT → CMD/BAT + JS/VBS/PS1/WSF/HTA/PL/PY: Два в одном</a> и последующему обсуждению <a href="http://forum.script-coding.com/viewtopic.php?id=10116">Общение → CMD/BAT → CMD/BAT + JS/VBS/PS1/WSF/HTA/PL: Два в одном</a></p><p>Нашел еще один гибрид bash+cmd. Два варианта</p><p><strong>Вариант 1</strong><br />Хитрость в том, что пролог состоит	из строк кода, корректных как для bash так и для cmd. Вся хитрость в символе SUB (ascii26). <br /></p><div class="quotebox"><blockquote><p>двоеточий (:) пробел (ascii32) решетка (#) пробел (ascii32) SUB (ascii26) набор команд	cmd</p></blockquote></div><p>-- cmd интерпретирует его как разделитель строк, таким образом каждая строка (от начала строки и до CRLF) разбивается на две и рассматривается как две отдельные строки кода. Таким образом, первая часть строки до SUB - метка, вторая - обычная команда. </p><p>-- Далее вызывается bash, которому передается этот же файл на исполнение и передаются все входные параметры. Для bash все эти строки - набор пустых команды (двоеточие) с последующим комментарием (решетка и до конца строки). </p><p>В браузере символ не видим, но, вроде бы, копируется в буфер. Способ не самый удобный (из-за некоторой трудности ввода символа SUB), но универсальный. <br /></p><div class="codebox"><pre><code>
: # @echo off
: # echo:==== cmd
: # bash &quot;%~f0&quot; %*
: # echo:==== cmd again
: # goto :EOF

echo &quot;==== bash&quot;
for n in &quot;$@&quot; ; do echo &quot;$n&quot; ; done
exit
</code></pre></div><p><strong>Вариант 2</strong><br />-- Первая строка для cmd - метка и текст, который игнорируется при исполнении. Далее вызывается bash. </p><p>-- Bash видит пустую команду (двоеточие) и heredoc (текст меджу метками ____CMD____). </p><p>Этот вариант проще создать (не надо выдумывать способ ввода символа SUB). Благодаря тому, что маркер heredoc обрамлен апострофами, текст внутри не интерпретируется. <br /></p><div class="codebox"><pre><code>
: &lt;&lt; &#039;____CMD____&#039;

@echo off
echo:==== cmd
bash &quot;%~f0&quot; %*
echo:==== cmd again
goto :eof

____CMD____

echo &quot;==== bash&quot;
for n in &quot;$@&quot; ; do echo &quot;$n&quot; ; done
exit 0
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 27 Apr 2016 16:47:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103125#p103125</guid>
		</item>
	</channel>
</rss>
