Встроенные команды ТCL


exec

        Команда запускает подпроцессы.

         Синтаксис
        exec?switches? arg?arg...?

        Описание

        Аргументы команды определяют один или несколько подпроцессов, которые необходимо выполнить. Аргументы принимают форму конвейера, в котором каждый arg задает одно слово команды, а каждая отдельная команда порождает подпроцесс.

        Если первые аргументы команды начинаются со знака «-», они считаются ключами команды, а не частью описания конвейера.

        Возможные ключи:

        -keepnewline — сохраняет конечные пробелы в выходных данных конвейера. Обычно они отсекаются.

        - — отмечает конец ключей. Аргумент, следующий за этим ключом, рассматривается как первый аргумент arg, даже если он начинается со знака «-».

        Перечисленные ниже аргументы (пары аргументов) используют не для определения подпроцессов, а для перенаправления потоков ввода и вывода между ними. В выражения типа < fileName fileName может писаться как отдельно, так и слитно ().

        | — разделяет команды в конвейере. Стандартный вывод предыдущей команды направляется на стандартный вход следующей команды.

        |& — разделяет команды в конвейере. Стандартный ввод и стандартный вывод ошибок предыдущей команды направляются на стандартный вход следующей команды. Такое выражение перебивает выражения типа 2> и >&.

        < fileName — файл fileName отрывается и используется как стандартный ввод для первой команды конвейера.

        <@ fileId — в этой форме fileId — это идентификатор файла, открытого с помощью команды open. Он используется как стандартный ввод для первой команды конвейера. Файл должен быть открыт для чтения.

        << value value используется как стандартный ввод для первой команды конвейера.

        > fileName — стандартный вывод последней команды перенаправляется в файл fileName и перезаписывает его содержимое.

        2> fileName — стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое.

        >& fileName — стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое.

        >>fileName — стандартный вывод последней команды перенаправляется в файл fileName и добавляется к его прежнему содержимому.

        2>>fileName — стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и добавляется к его прежнему содержимому.

        >>& fileName — стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и добавляется к его прежнему содержимому.

        >@ fileId — в этой форме fileId — это идентификатор файла, открытого с помощью команды open. Стандартный вывод последней команды перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.

        2>@ fileId — в этой форме fileId — это идентификатор файла, открытого с помощью команды open. Стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.

        >&@ fileId — в этой форме fileId — это идентификатор файла, открытого с помощью команды open. Стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.

        Если стандартный вывод последней команды конвейера не был перенаправлен, то команда exec возвращает его значение. Если одна из команд конвейера вернула код ошибки, была прервана или приостановлена, то команда exec вернет код ошибки. При этом сообщение об ошибке будет включать стандартный вывод конвейера и сообщение об ошибке. В переменной errorCode будет записана дополнительная информация о последней встреченной ошибке. Если хотя бы одна из команд конвейера пишет информацию об ошибках в файл и стандартный вывод ошибок не перенаправлен, команда exec вернет ошибку, сообщение об ошибке будет включать в себя стандартный вывод конвейера, дополненный сообщениями об ошибках (если их было несколько) и стандартным выводом ошибок.

        Если последний символ результата исполнения конвейера или сообщения об ошибке — перевод каретки, то он будет удален из результата или сообщения соответственно. Это соответствует общему правилу Tcl, по которому возвращаемая величина, как правило, не оканчивается символом перевода каретки. Однако, если указана опция -keepnewline, символ перевода каретки в конце сохраняется.

        Если стандартный ввод конвейера не перенаправлен с помощью символов <, << или <@, стандартный ввод в первую команду конвейера осуществляется со стандартного ввода приложения.

        Если последним аргументом конвейера является &, конвейер выполняется в фоновом режиме. В этом случае команда exec возвращает список идентификаторов всех процессов конвейера. Стандартный вывод последней команды конвейера, если он не перенаправлен, выводится на стандартный вывод приложения. Стандартный вывод ошибок, если он не перенаправлен, осуществляется в стандартный вывод ошибок приложения.

        Первое слово в каждой команде считается именем команды. В нем выполняются тильда-подстановки. Если получившийся при этом результат не содержит слешей, соответствующая команда ищется в каталогах, перечисленных в переменной окружения PATH. Если имя команды после подстановок содержит слеши, оно должно указывать на исполняемый файл, доступный из текущего каталога. Никакие другие подстановки в командах, например, принятые в shell подстановки «*» и «?», не выполняются.
Hosted by uCoz