2018-02-05 17:22:04 +03:00
|
|
|
|
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>exec</title>
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
<h1>exec</h1>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Команда запускает подпроцессы.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>СИНТАКСИС</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<strong>exec</strong> ?<em>switches</em>? <em>arg</em> ?<em>arg</em>...?
|
|
|
|
|
</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>ОПИСАНИЕ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p> Аргументы команды определяют один или нескольких подпроцессов,
|
|
|
|
|
которые необходимо выполнить. Аргументы принимают форму
|
|
|
|
|
конвейера, в котором каждый <em>arg</em> задает одно слово
|
|
|
|
|
команды, а каждая отдельная команда порождает подпроцесс.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если первые аргументы команды начинаются со знака
|
|
|
|
|
"-", они считаются ключами команды, а не частью
|
|
|
|
|
описания конвейера.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Возможные ключи:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<dl>
|
|
|
|
|
<dt><strong>-keepnewline</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Сохраняет конечные пробелы в выходных данных
|
|
|
|
|
конвейера. Обычно они отсекаются.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt> <strong>-</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd> Отмечает конец ключей. Аргумент, следующий за этим ключом,
|
|
|
|
|
рассматривается как первый аргумент <em>arg,</em> даже если он
|
|
|
|
|
начинается со знака "-".</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dl>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Перечисленные ниже аргументы (пары аргументов) используют не
|
|
|
|
|
для определения подпроцессов, а для перенаправления потоков
|
|
|
|
|
ввода и вывода между ними. В выражения типа
|
|
|
|
|
"<<em>fileName</em>" <em>fileName</em> может писаться
|
|
|
|
|
как отдельно, так и слитно
|
2015-10-19 13:27:31 +03:00
|
|
|
|
("<<em>fileName</em>>").</p>
|
|
|
|
|
<table>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>|</td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>разделяет команды в конвейере. Стандартный вывод
|
|
|
|
|
предыдущей команды направляется на стандартный вход
|
|
|
|
|
следующей команды.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>|&</td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>разделяет команды в конвейере. Стандартный вывод и
|
|
|
|
|
стандартный вывод ошибок предыдущей команды направляются
|
|
|
|
|
на стандартный вход следующей команды. Такое выражение
|
|
|
|
|
перебивает выражения типа 2> и >&.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>< <em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>файл <em>fileName</em> отрывается и используется как
|
|
|
|
|
стандартный ввод для первой команды конвейера.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><@ <em>fileId</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>в этой форме <em>fileId</em> это идентификатор файла,
|
|
|
|
|
открытого с помощью команды <a href=
|
|
|
|
|
open.html><strong>open</strong></a>. Он используется как
|
|
|
|
|
стандартный ввод для первой команды конвейера. Файл должен
|
|
|
|
|
быть открыт для чтения.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><< <em>value</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td><em>value</em> используется как стандартный ввод для
|
|
|
|
|
первой команды конвейера.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>> <em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод последней команды перенаправляется в
|
|
|
|
|
файл <em>fileName</em> и перезаписывает его содержимое.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>2> <em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод ошибок всех команд в конвейере
|
|
|
|
|
перенаправляется в файл <em>fileName</em> и перезаписывает
|
|
|
|
|
его содержимое.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>>& <em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод последней команды и стандартный вывод
|
|
|
|
|
ошибок всех команд в конвейере перенаправляется в файл
|
|
|
|
|
<em>fileName</em> и перезаписывает его содержимое.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>>><em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод последней команды перенаправляется в
|
|
|
|
|
файл <em>fileName</em> и добавляется к его прежнему
|
|
|
|
|
содержимому.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>2>><em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод ошибок всех команд в конвейере
|
|
|
|
|
перенаправляется в файл <em>fileName</em> и добавляется к его
|
|
|
|
|
прежнему содержимому.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>>>& <em>fileName</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Стандартный вывод последней команды и стандартный вывод
|
|
|
|
|
ошибок всех команд в конвейере перенаправляется в файл
|
|
|
|
|
<em>fileName</em> и добавляется к его прежнему содержимому.
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>>@ <em> ileId</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>В этой форме <em>fileId</em> это идентификатор файла,
|
|
|
|
|
открытого с помощью команды <a href=
|
|
|
|
|
open.html><strong>open</strong></a>. Стандартный вывод
|
|
|
|
|
последней команды перенаправляется в файл <em>fileName</em>
|
|
|
|
|
и перезаписывает его содержимое. Файл должен быть открыт
|
|
|
|
|
для записи.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>2>@ <em>fileId</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>В этой форме <em>fileId</em> это идентификатор файла,
|
|
|
|
|
открытого с помощью команды <a
|
|
|
|
|
href=open.html><strong>open</strong></a>. Стандартный вывод
|
|
|
|
|
ошибок всех команд в конвейере перенаправляется в файл
|
|
|
|
|
<em>fileName</em> и перезаписывает его содержимое. Файл должен
|
|
|
|
|
быть открыт для записи.
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>>&@ <em>fileId</em></td>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>В этой форме <em>fileId</em> это идентификатор файла,
|
|
|
|
|
открытого с помощью команды <a href=
|
|
|
|
|
open.html><strong>open</strong></a>. Стандартный вывод
|
|
|
|
|
последней команды и стандартный вывод ошибок всех команд в
|
|
|
|
|
конвейере перенаправляется в файл <em>fileName</em> и
|
|
|
|
|
перезаписывает его содержимое. Файл должен быть открыт для
|
|
|
|
|
записи.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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> Если стандартный ввод конвейера не
|
|
|
|
|
перенаправлен с помощью символов "<",
|
|
|
|
|
"<<" или "<@", стандартный ввод в первую
|
|
|
|
|
команду конвейера осуществляется со стандартного ввода
|
|
|
|
|
приложения.</p>
|
|
|
|
|
|
|
|
|
|
<p>Если последним аргументом конвейера является "&",
|
|
|
|
|
конвейер выполняется в фоновом режиме. В этом случае команда
|
|
|
|
|
<strong>exec</strong> возвращает список идентификаторов всех процессов
|
|
|
|
|
конвейера. Стандартный вывод последней команды конвейера, если
|
|
|
|
|
он не перенаправлен, выводится на стандартный вывод
|
|
|
|
|
приложения. Стандартный вывод ошибок, если он не перенаправлен,
|
|
|
|
|
осуществляется в стандартный вывод ошибок приложения.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Первое слово в каждой команде считается именем команды. В нем
|
|
|
|
|
выполняются тильда - подстановки. Если получившийся при этом
|
|
|
|
|
результат не содержит слэшей, соответствующая команда ищется в
|
|
|
|
|
каталогах, перечисленных в переменной окружения PATH. Если имя
|
|
|
|
|
команды после подстановок содержит слэши, оно должно указывать
|
|
|
|
|
на исполняемый файл, доступный из текущего каталога. Никакие
|
|
|
|
|
другие подстановки в командах, например, принятые в shell
|
|
|
|
|
подстановки <strong>*</strong> и <strong>?</strong>, не выполняются.
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</p>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>ВОПРОСЫ ПЕРЕНОСИМОСТИ НА ДРУГИЕ ПЛАТФОРМЫ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dt><strong>Windows (все версии)</strong></dt>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd><p> Чтение и запись с использование <strong>@ fileId'</strong>' не
|
|
|
|
|
работают. Исполнение 16- и 32-разрядных приложений
|
|
|
|
|
различается между собой и отличается от описанного выше. Tk
|
|
|
|
|
консоль не реализует всех стандартных возможностей
|
|
|
|
|
ввода/вывода.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>В командах допускается использование как прямых, так и
|
|
|
|
|
обратных слэшей при указании пути команды. Однако, если путь
|
|
|
|
|
является аргументом команды, это может оказаться и не
|
|
|
|
|
так.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Двойной слэш в путях указывает на сетевой адрес.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</dd>
|
|
|
|
|
|
|
|
|
|
<dt><strong>Windows NT</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Для выполнения встроенных команд shell, таких, как
|
|
|
|
|
<strong>dir</strong> или <strong>copy</strong>, перед ними необходимо указать
|
2015-10-19 13:27:31 +03:00
|
|
|
|
"<strong>cmd.exe /c</strong>".</dd>
|
|
|
|
|
|
|
|
|
|
<dt><strong>Windows 95</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd> Для выполнения встроенных команд shell, таких, как
|
|
|
|
|
<strong>dir</strong> или <strong>copy</strong>, перед ними необходимо указать
|
2015-10-19 13:27:31 +03:00
|
|
|
|
"<strong>command.com /c</strong>".</dd>
|
|
|
|
|
|
|
|
|
|
<dt><strong>Windows 3.X</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Возможности команды <strong>exec</strong> сильно ограничены.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>Macintosh</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Команда <strong>exec</strong> не реализована.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>Unix</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd> Команда <strong>exec</strong> позволяет исполнять любые приложения и
|
|
|
|
|
действует как описано выше.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
</dl>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|