Работа с Yandex Cloud CLI и API в Microsoft Windows
Сервисы Yandex Cloud предоставляют различные интерфейсы для решения ваших задач. Как правило, сервисы Yandex Cloud имеют веб-интерфейс в консоли управления
Документация Yandex Cloud содержит пошаговые инструкции для работы с разными интерфейсами. Примеры команд CLI и запросов API, как правило, используют синтаксис командной оболочки Bash. Вы можете запустить эти примеры без изменений в консоли Linux, терминале macOS или терминале WSL
Если вы работаете с Yandex Cloud в Windows без WSL, примеры команд CLI и запросов API могут выполняться некорректно. Чтобы воспользоваться примерами из документации, установите интерфейс командной оболочки Bash на свой компьютер, создайте виртуальную машину для работы с Yandex Cloud или адаптируйте команды под синтаксис используемой вами командной оболочки Windows. Подробнее о командных оболочках Windows см. в официальной документации Microsoft.
Как запускать команды Bash в терминале Windows
Windows Subsystem for Linux
-
Проверьте, установлена ли подсистема WSL на вашем компьютере, выполнив в терминале cmd или PowerShell команду:
wsl -u root
При установленной WSL терминал перейдет в режим работы Bash:
root@<имя_компьтера>:/mnt/c/Users/<имя_пользователя>#
-
Если WSL не установлена, установите
ее и повторите предыдущее действие.
Если вы работаете в системе Windows без WSL, вы можете установить эмулятор оболочки Bash, например Git Bash
Как адаптировать код для нативных командных оболочек Windows
Если вы хотите запустить код Bash в cmd или PowerShell, приведите его к соответствующему виду:
- Замените элементы базового синтаксиса.
- Проверьте формат одноименных команд.
- Замените прочие команды на аналоги.
- Проверьте имена системных переменных и вспомогательный синтаксис.
Замените элементы базового синтаксиса
-
Поменяйте разделитель каталогов в путях файлов: в Linux для этого служит прямая косая черта
/
, в Windows - обратная\
. -
Поменяйте символы переноса строки. Вместо символа
\
в cmd используйте^
, а в PowerShell -`
). -
Проверьте использование всех видов кавычек: в Linux
и в PowerShell они обрабатываются по-разному. -
Проверьте синтаксис использования переменных.
Примеры использования переменных
Действие Linux Windows cmd PowerShell Запись переменной export VAR="1"
set VAR="1"
$Env:VAR="1"
Чтение переменной ${VAR}
%VAR%
$Env:VAR
Проверьте формат одноименных команд
У многих команд cmd и PowerShell есть псевдонимы, одноименные командам Bash. Например, команда PowerShell Set-Location
, которая позволяет перейти в другой каталог, будет вызвана, если в терминале ввести cd
.
Если код отрабатывает с ошибками:
-
Проверьте, имеет ли команда Bash одноименную команду в вашем терминале. Например, в PowerShell выполните:
alias
В результате будет выведен список всех псевдонимов, определенных в настройках системы:
CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host ...
Полный список псевдонимов см. в выводе команды
alias
. -
Убедитесь, что команда в вашей командной оболочке выполняет ту же функцию, что и одноименная команда в оболочке Bash.
-
Проверьте формат команды: ключи псевдонимов могут отличаться. Например, команда
ls
имеет одноименный псевдоним в оболочке PowerShell, однако ключи аргументов не совпадают.
Замените прочие команды на аналоги
-
Если команда не имеет одноименного псевдонима, найдите ее аналог.
Соответствие имен команд в Linux, cmd и PowerShell
Действие Linux Windows cmd Windows PowerShell Вывести содержимое папки ls -s
dir
dir
,ls
,Get-ChildItem
Вывести содержимое папки и вложенных папок ls -R
tree
ls
,Get-ChildItem
Создать файл touch
copy nul >
New-Item
Переименовать файл mv
ren
ren
,Rename-Item
Копировать файл cp
copy
copy
,Copy-Item
Переместить файл mv
move
move
,Move-Item
Удалить файл rm
del
del
,Remove-Item
Сравнить содержимое файлов diff
fc
diff
,Get-Content
,Compare-Object
Найти строки в файле или свойства объекта grep
find
Select-String
,Where-Object
Вывести справку по команде man <команда>
<команда> /?
Get-Help <команда>
Вывести имя текущей папки pwd
cd
$PWD
Создать папку mkdir
md
mkdir
,New-Item
Вывести текущие дата и время date
time
Get-Date
Настроить политики доступа к файлу chown
,chmod
attrib
attrib
,Set-XFileOwner
Выполнить команду по таймеру cron
at
schtasks
,Register-ScheduledJob
Обратиться к веб-ресурсу по HTTP wget
wget
Invoke-WebRequest
-
Если прямого аналога команды нет, то действие можно выполнить комбинацией команд или другими методами. Например, чтобы конвертировать файл в Base64
в PowerShell, используйте статический метод класса Convert:[Convert]::ToBase64String([IO.File]::ReadAllBytes(''<имя файла>''))
. -
Учитывайте специфику вашей командной оболочки. Например, PowerShell работает не с текстом, а с объектами и их свойствами, поэтому вместо поиска по строке
grep
в большинстве случаев используется команда PowerShellWhere-Object
, которая обрабатывает объекты с нужными значениями свойств. Если же нужно найти последовательность символов, используйте командуSelect-String
.
Проверьте имена системных переменных и вспомогательный синтаксис
- Проверьте имена переменных среды. Например, вместо переменной среды Linux
USER
в Windows используется переменнаяUSERNAME
. - Если код содержит операторы сравнения, ветвления или циклы, измените синтаксис в соответствии с требованиями вашей командной оболочки. Подробнее о разнице вспомогательного синтаксиса оболочек Bash и PowerShell см. Bash vs PowerShell Cheat Sheet
.