# Процесс

Здесь описаны операторы и функции для работы с процессами и приложениями. Функции *Args* и *ArgCount* работают с командной строкой любого формата. Для корректной работы остальных *Arg..* функций необходимо, чтобы командная строка имела следующий формат.

```go
CmdLine = [ CmdOptions ] ["-"] [ CmdParameters ]
CmdParameters = { CmdParameter }
CmdParameter = ParamWithoutSpace | "Param With Spaces" | 'Param With Spaces'
CmdOptions = {CmdOption}
CmdOption = "-" | "--" {letter} [ CmdOptionValue | CmdOptionValues ]
CmdOptionValue = "=" | ":" CmdParameter
CmdOptionValues = " " CmdParameters
```

```
-p="my value" --flag - one two three
-i:10 -n:Bob "one par" two three
--ext "*.txt" .js .html -o=/home/ak/dest /home/ak/in1 /home/ak/in2
```

* [Arg( str name ) str](/stdlib/process.md#arg-str-name-str)
* [Arg( str name, str def ) str](/stdlib/process.md#arg-str-name-str-def-str)
* [Arg( str name, int def ) int](/stdlib/process.md#arg-str-name-int-def-int)
* [ArgCount() int](/stdlib/process.md#argcount-int)
* [Args() arr.str](/stdlib/process.md#args-arr-str)
* [Args( str name ) arr.str](/stdlib/process.md#args-str-name-arr-str)
* [ArgsTail() arr.str](/stdlib/process.md#argstail-arr-str)
* [IsArg( str name ) bool](/stdlib/process.md#isarg-str-name-bool)
* [Open( str path )](/stdlib/process.md#open-str-path)
* [OpenWith( str app, str path )](/stdlib/process.md#openwith-str-app-str-path)
* [Run( str cmd, str params... )](/stdlib/process.md#run-str-cmd-str-params)
* [SplitCmdLine( str cmdline ) arr.str](/stdlib/process.md#splitcmdline-str-cmdline-arr-str)
* [Start( str cmd, str params... )](/stdlib/process.md#start-str-cmd-str-params)

## Операторы

| Operator                 | Result | Description                                       |
| ------------------------ | ------ | ------------------------------------------------- |
| **$** command line       |        | Запустить командную строку.                       |
| str = **$** command line |        | Запустить командную строку и возвратить её вывод. |

## Функции

### Arg(str name) str

Функция *Arg* возвращает значение параметра с указанным именем. Если параметр не был указан при запуске скрипта, то возвратится пустая строка. В имени параметра можно не указывать начальный символ **-**.

### Arg(str name, str def) str

Функция *Arg* возвращает значение параметра с указанным именем **name**. Если параметр не был указан при запуске скрипта, то возвратится значение **def**. В имени параметра можно не указывать начальный символ **-**.

### Arg(str name, int def) int

Функция *Arg* возвращает числовое значение параметра с указанным именем **name**. Если параметр не был указан при запуске скрипта, то возвратится число **def**. В имени параметра можно не указывать начальный символ **-**.

### ArgCount() int

Функция *ArgCount* возвращает количество параметров командной строки с которыми был запущен скрипт.

### Args() arr.str

Функция *Args* возвращает список всех параметров и опций командной строки с которыми был запущен скрипт.

### Args(str name) arr.str

Функция *Args* возвращает список значений параметра с именем **name**. В имени параметра можно не указывать начальный символ **-**.

```
// --ext .txt .js .html -o=/home/ak/dest /home/ak/in1 /home/ak/in2
list = Args(`--ext`) 
// list == [.txt, .js, .html]
```

### ArgsTail() arr.str

Функция *ArgsTail* возвращает список параметров командной строки после опций. Можно явно указать начало таких параметров с помощью **-**.

```
// --ext .txt .js .html -o=/home/ak/dest /home/ak/in1 /home/ak/in2
list = ArgsTail() // list == [/home/ak/in1, /home/ak/in2]

// -i=false - val0 -value1 "value 2" 
list = ArgsTail() // list == [val0, -value1, value 2]
```

### IsArg(str name) bool

Функция *IsArg* возвращает *true*, если в командной строке имеется опция с указанным именем. В противном случае, возвращается *false*. В имени параметра можно не указывать начальный символ **-**.

### Open(str path)

Функция *Open* открывает файл, директорию или URI адрес приложением по умолчанию для объектов данного типа. Скрипт не ожидает завершения работы.

### OpenWith(str app, str path)

Функция *OpenWith* открывает файл, директорию или URI адрес в указанном приложении. Скрипт не ожидает завершения работы.

### Run(str cmd, str params...)

**Опциональные параметры**

* **buf stdin** - буфер, который будет передан приложению как стандартный ввод.
* **buf stdout** - буфер, в который будет записан стандартный вывод приложения.
* **buf stderr** - буфер, в который будет записан стандартный вывод ошибок приложения.

Функция *Run* запуcкает указанную программу *cmd* c параметрами и ожидает её окончание. Дополнительно, вы можете переопределить стандартный ввод и вывод.

```go
    buf dirout
    Run("dir", stdout: dirout)
    Run("bash", stdin: buf(
      |`echo "dirs"
        #comment    
        echo "%{str(dirout)}"`
    ))
```

### SplitCmdLine(str cmdline) arr.str

Функция *SplitCmdLine* разбирает входящую строку с параметрами командной строки и возвращает массив параметров.

```go
run str {
    return SplitCmdLine(`param1 "second par" "qwert\"y" 100 'oo ps'
-lastparam`).Join(`=`)
}
// returns param1=second par=qwert"y=100=oo ps=-lastparam
```

### Start(str cmd, str params...)

**Опциональные параметры**

* **buf stdin** - буфер, который будет передан приложению как стандартный ввод.

Функция *Start* запуcкает указанную программу *cmd* c параметрами и выполняет скрипт дальше. Дополнительно, вы можете передать буфер в качестве стандартного ввода.

```go
    Start("echo", "hello, world!")
    Start("bash", stdin: buf(
      |`./myscript1.sh
        ./myscript2.sh`
    ))
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/process.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
