projman/hlp/ru/tcl/exec.html
2018-02-05 17:23:37 +03:00

257 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<head>
<title>exec</title>
</head>
<body>
<h1>exec</h1>
<p>Команда запускает подпроцессы.</p>
<h2>СИНТАКСИС</h2>
<pre>
<strong>exec</strong> ?<em>switches</em>? <em>arg</em> ?<em>arg</em>...?
</pre>
<h2>ОПИСАНИЕ</h2>
<p> Аргументы команды определяют один или нескольких подпроцессов,
которые необходимо выполнить. Аргументы принимают форму
конвейера, в котором каждый <em>arg</em> задает одно слово
команды, а каждая отдельная команда порождает подпроцесс.</p>
<p>Если первые аргументы команды начинаются со знака
&quot;-&quot;, они считаются ключами команды, а не частью
описания конвейера.</p>
<p>Возможные ключи:</p>
<dl>
<dt><strong>-keepnewline</strong></dt>
<dd>Сохраняет конечные пробелы в выходных данных
конвейера. Обычно они отсекаются.</dd>
<dt> <strong>-</strong></dt>
<dd> Отмечает конец ключей. Аргумент, следующий за этим ключом,
рассматривается как первый аргумент <em>arg,</em> даже если он
начинается со знака &quot;-&quot;.</dd>
</dl>
<p>Перечисленные ниже аргументы (пары аргументов) используют не
для определения подпроцессов, а для перенаправления потоков
ввода и вывода между ними. В выражения типа
&quot;&lt;<em>fileName</em>&quot; <em>fileName</em> может писаться
как отдельно, так и слитно
(&quot;&lt;<em>fileName</em>&gt;&quot;).</p>
<table>
<tbody>
<tr>
<td>|</td>
<td>разделяет команды в конвейере. Стандартный вывод
предыдущей команды направляется на стандартный вход
следующей команды.</td>
</tr>
<tr>
<td>|&amp;</td>
<td>разделяет команды в конвейере. Стандартный вывод и
стандартный вывод ошибок предыдущей команды направляются
на стандартный вход следующей команды. Такое выражение
перебивает выражения типа 2&gt; и &gt;&amp;.</td>
</tr>
<tr>
<td>&lt; <em>fileName</em></td>
<td>файл <em>fileName</em> отрывается и используется как
стандартный ввод для первой команды конвейера.</td>
</tr>
<tr>
<td>&lt;@ <em>fileId</em></td>
<td>в этой форме <em>fileId</em> это идентификатор файла,
открытого с помощью команды <a href=
open.html><strong>open</strong></a>. Он используется как
стандартный ввод для первой команды конвейера. Файл должен
быть открыт для чтения.</td>
</tr>
<tr>
<td>&lt;&lt; <em>value</em></td>
<td><em>value</em> используется как стандартный ввод для
первой команды конвейера.</td>
</tr>
<tr>
<td>&gt; <em>fileName</em></td>
<td>Стандартный вывод последней команды перенаправляется в
файл <em>fileName</em> и перезаписывает его содержимое.</td>
</tr>
<tr>
<td>2&gt; <em>fileName</em></td>
<td>Стандартный вывод ошибок всех команд в конвейере
перенаправляется в файл <em>fileName</em> и перезаписывает
его содержимое.</td>
</tr>
<tr>
<td>&gt;&amp; <em>fileName</em></td>
<td>Стандартный вывод последней команды и стандартный вывод
ошибок всех команд в конвейере перенаправляется в файл
<em>fileName</em> и перезаписывает его содержимое.</td>
</tr>
<tr>
<td>&gt;&gt;<em>fileName</em></td>
<td>Стандартный вывод последней команды перенаправляется в
файл <em>fileName</em> и добавляется к его прежнему
содержимому.</td>
</tr>
<tr>
<td>2&gt;&gt;<em>fileName</em></td>
<td>Стандартный вывод ошибок всех команд в конвейере
перенаправляется в файл <em>fileName</em> и добавляется к его
прежнему содержимому.</td>
</tr>
<tr>
<td>&gt;&gt;&amp; <em>fileName</em></td>
<td>Стандартный вывод последней команды и стандартный вывод
ошибок всех команд в конвейере перенаправляется в файл
<em>fileName</em> и добавляется к его прежнему содержимому.
</td>
</tr>
<tr>
<td>&gt;@ <em> ileId</em></td>
<td>В этой форме <em>fileId</em> это идентификатор файла,
открытого с помощью команды <a href=
open.html><strong>open</strong></a>. Стандартный вывод
последней команды перенаправляется в файл <em>fileName</em>
и перезаписывает его содержимое. Файл должен быть открыт
для записи.</td>
</tr>
<tr>
<td>2&gt;@ <em>fileId</em></td>
<td>В этой форме <em>fileId</em> это идентификатор файла,
открытого с помощью команды <a
href=open.html><strong>open</strong></a>. Стандартный вывод
ошибок всех команд в конвейере перенаправляется в файл
<em>fileName</em> и перезаписывает его содержимое. Файл должен
быть открыт для записи.
</td>
</tr>
<tr>
<td>&gt;&amp;@ <em>fileId</em></td>
<td>В этой форме <em>fileId</em> это идентификатор файла,
открытого с помощью команды <a href=
open.html><strong>open</strong></a>. Стандартный вывод
последней команды и стандартный вывод ошибок всех команд в
конвейере перенаправляется в файл <em>fileName</em> и
перезаписывает его содержимое. Файл должен быть открыт для
записи.</td>
</tr>
</tbody>
</table>
<p>Если стандартный вывод последней команды конвейера не был
перенаправлен, то команда <strong>exec</strong> возвращает его
значение. Если одна из команд конвейера вернула код ошибки, была
прервана или приостановлена, то команда <strong>exec</strong> вернет код
ошибки. При этом сообщение об ошибке будет включать стандартный
вывод конвейера и сообщение об ошибке. В переменной
<a href=tclvars.html#errorCode><strong>errorCode</strong></a> будет записана
дополнительная информация о последней встреченной ошибке. Если
хотя бы одна из команд конвейера пишет информацию об ошибках в
файл и стандартный вывод ошибок не перенаправлен, команда
<strong>exec</strong> вернет ошибку, сообщение об ошибке будет включать в
себя стандартный вывод конвейера, дополненный сообщениями об
ошибках (если их было несколько) и стандартным выводом
ошибок.</p>
<p>Если последний символ результата исполнения конвейера или
сообщения об ошибке - перевод каретки, то он будет удален из
результата или сообщения соответственно. Это соответствует
общему правилу Tcl, по которому возвращаемая величина, как
правило, не оканчивается символом перевода каретки. Однако, если
указана опция <strong>-keepnewline</strong>, символ перевода каретки в
конце сохраняется.<br> Если стандартный ввод конвейера не
перенаправлен с помощью символов &quot;&lt;&quot;,
&quot;&lt;&lt;&quot; или &quot;&lt;@&quot;, стандартный ввод в первую
команду конвейера осуществляется со стандартного ввода
приложения.</p>
<p>Если последним аргументом конвейера является &quot;&amp;&quot;,
конвейер выполняется в фоновом режиме. В этом случае команда
<strong>exec</strong> возвращает список идентификаторов всех процессов
конвейера. Стандартный вывод последней команды конвейера, если
он не перенаправлен, выводится на стандартный вывод
приложения. Стандартный вывод ошибок, если он не перенаправлен,
осуществляется в стандартный вывод ошибок приложения.</p>
<p>Первое слово в каждой команде считается именем команды. В нем
выполняются тильда - подстановки. Если получившийся при этом
результат не содержит слэшей, соответствующая команда ищется в
каталогах, перечисленных в переменной окружения PATH. Если имя
команды после подстановок содержит слэши, оно должно указывать
на исполняемый файл, доступный из текущего каталога. Никакие
другие подстановки в командах, например, принятые в shell
подстановки <strong>*</strong> и <strong>?</strong>, не выполняются.
</p>
<h2>ВОПРОСЫ ПЕРЕНОСИМОСТИ НА ДРУГИЕ ПЛАТФОРМЫ</h2>
<dl>
<dt><strong>Windows (все версии)</strong></dt>
<dd><p> Чтение и запись с использование <strong>@ fileId'</strong>' не
работают. Исполнение 16- и 32-разрядных приложений
различается между собой и отличается от описанного выше. Tk
консоль не реализует всех стандартных возможностей
ввода/вывода.</p>
<p>В командах допускается использование как прямых, так и
обратных слэшей при указании пути команды. Однако, если путь
является аргументом команды, это может оказаться и не
так.</p>
<p>Двойной слэш в путях указывает на сетевой адрес.</p>
</dd>
<dt><strong>Windows NT</strong></dt>
<dd>Для выполнения встроенных команд shell, таких, как
<strong>dir</strong> или <strong>copy</strong>, перед ними необходимо указать
&quot;<strong>cmd.exe /c</strong>&quot;.</dd>
<dt><strong>Windows 95</strong></dt>
<dd> Для выполнения встроенных команд shell, таких, как
<strong>dir</strong> или <strong>copy</strong>, перед ними необходимо указать
&quot;<strong>command.com /c</strong>&quot;.</dd>
<dt><strong>Windows 3.X</strong></dt>
<dd>Возможности команды <strong>exec</strong> сильно ограничены.</dd>
<dt><strong>Macintosh</strong></dt>
<dd>Команда <strong>exec</strong> не реализована.</dd>
<dt><strong>Unix</strong></dt>
<dd> Команда <strong>exec</strong> позволяет исполнять любые приложения и
действует как описано выше.</dd>
</dl>
</body>
</html>