Командные интерпретаторы используются для
* выполнения действий с несколькими файлами ("маски"), с использованием истории действий и автодополнения;
* запуск программы с нужными аргументами с перенаправлением входных и выходных потоков;
* настройки системного окружения перед запуском программы (подключение сетевых дисков, добавление путей, переход в рабочую папку);
* выполнение сложной последовательности действий, с учетом текущего окружения и результатов действий.
В Linux используются sh, bash, csh, в Windows -- cmd, PowerShell, в DOS -- command.com. Они имеют похожие возможности,
так как в основе командный интерпретатор Unix.
Перенаправление ввода-вывода и конвейеры
```text
program <имя_входного_файла >имя_выходного_файла
program >имя_выходного_файла 2>имя_вых_файла_для_ошибок
program >>имя_выходного_файла_с_добавлением
program1 | program2 | program3
```
В последнем варианте выход одной программы становится входом для другой, например, для постраничного вывода: ``help|more``.
В Linux и cmd передается текст, в PowerShell могут передаваться коллекции объектов любых типов.
||.draw||Действие|bash|cmd|PowerShell
---|----|---|---
Текущий путь|``pwd``|``cd``|``Get-Location``
Изменение пути|``cd`` путь|``cd /d`` путь|``Set-Location`` путь
Переход с сохранением|``pushd`` путь|``pushd`` путь|``Push-Location`` путь
Восстановление пути|``popd``|``popd``|``Pop-Location``
В PowerShell поддерживаются сокращенные имена команд ``Get-Location`` -- ``pwd``, ``Set-Location`` -- ``cd``.
Узнать все сокращения можно с помощью команды ``Get-Alias``
В bash различаются переменные окружения и переменные в командном файле.
Для арифметических вычислений в cmd используется ``SET /A``, в bash -- ``let`` и ``((``выражение``))``.
Вариант !VAR! используется для значений, устанавливаемых внутри операторов (IF, FOR), работает только при включении\
``SETLOCAL ENABLEDELAYEDEXPANSION``.
Действия с файловой системой:
||.draw||Действие|bash|cmd|PowerShell
---|----|---|---
Список файлов|ls|dir|Get-ChildItem
Копировать|cp|copy|Copy-Item
Переименовать|mv|ren, move|Rename-Item, Move-Item
Удалить|rm|del|Remove-Item
Создать папку|mkdir|mkdir|New-Item -itemtype directory
Удалить папку|rmdir|rmdir|Remove-Item
Выполнение программ:
||.draw||Действие|bash|cmd|PowerShell
---|----|---|---
Запуск|имя|имя|имя, & "имя"
Результат|$?|%ERRORLEVEL%|$LastExitCode
В строку|`` ` ``имя`` ` ``, $(имя)|через set|$(имя)
В фоне|имя &|start /b имя|Start-Process -NoNewWindow имя
Переключение|bg, fg|-|-
Список|ps|tasklist|Get-Process
Останов|kill|taskkill|Stop-Process
Для запуска программ из текущей папки в bash и PowerShell указать ./имя или .\\имя
Параметры командной строки доступны по $1, $2 в bash, $args[0], $args[1] в PS, %1, %2 в cmd. Для подстановки сложных выражений в PS в командах и строках в``""`` использовать $(выражение), например, ``$("ab:"+$a+$b)`` или ``"ab:$($a+$b)"``.
Пример - время выполнения программы program в мс с помощью cmd
```text
SET /A st=1%time:~0,2%*360000 + 1%time:~3,2%*6000 + 1%time:~6,2%*100 + 1%time:~9,2% - 36610100
program
SET /A et=1%time:~0,2%*360000 + 1%time:~3,2%*6000 + 1%time:~6,2%*100 + 1%time:~9,2% - 36610100
SET /A dt=(%et%-%st%)*10
ECHO %dt% ms
```