Основы Shell (bash)

По мере использования WP-CLI, вы поймете, что неболшие знания командной строки могут значительно ускорить рабочий процесс. Поэтому давайте поговорим о некоторых вспомогательных утилитах командной строки.

Смотрите также:

Поиск в истории bash

Знаете ли вы, что каждая команда, которую вы выполняете в командной оболочке, сохраняется в истории? Поиск в истории с помощью CTRL + R:

$ wp core download --version=nightly --force
bck-i-search: wp

Когда появится 'bck-i-search', ваши клавиши будут искать команды, сохраненные в истории bash. Нажмите Enter, чтобы запустить текущий выбор.

Или другой способ поиска по истории - поиск по выводам команды history, например:

$ history | grep wp

Любая из команд, найденных в этом списке, может быть повторно выполнена по номеру bang-number, поэтому, например, если в выводе указано, что нужная вам команда - #218, вы просто выполните !218.

Объединение команд WP-CLI

Во многих случаях возможность передать результаты выполнения одной команды другой может оказаться крайне полезным. Cуществует два распространенных подхода к комбинированию команд.

Подстановка команды передает вывод одной команды другой команде, без какого-либо преобразования вывода.

Например, команда wp post list перечисляет посты, используем это. В примере ниже команда перечисляет идентификаторы страниц в виде значений, разделенных пробелами.

$ wp post list --post_type='page' --format=ids
1164 1186

Комбинация wp post list с wp post delete позволяет легко удалить все сообщения. В этом примере $() позволяет нам передавать идентификаторы страниц, разделенные пробелами, в wp post delete.

$ wp post delete $(wp post list --post_type='page' --format=ids)
Success: Trashed post 1164.
Success: Trashed post 1186.

Если вам нужно больше гибкости, есть утилита (команда) xargs - она позволяет передавать вывод одной команды в другую команду, выполняя при этом незначительные преобразования вывода первой команды.

Например, вы хотите назначить все возможности редактора роли автора. Однако, wp cap list перечисляет возможности, разделенные новыми строками, а wp cap add принимает только возможности, разделенные пробелами. xargs по умолчанию делает из списка разделенного новой строкой, список разделенный пробелами. Обратите внимание на оператор pipe |, который передает результаты wp cap list в xargs. Без | вы увидите ошибку WP-CLI.

$ wp cap list 'editor' | xargs wp cap add 'author'
Success: Added 24 capabilities to 'author' role.

wp user generate только генерирует пользователей; он не выполняет дополнительных операций. В этом примере wp user generate передает идентификаторы пользователей в xargs, который разбивает разделенные пробелами идентификаторы на список и вызывает wp user meta add для каждого.

$ wp user generate --count=5 --format=ids | xargs -0 -d ' ' -I % wp user meta add % foo bar
Success: Added custom field.
Success: Added custom field.
Success: Added custom field.
Success: Added custom field.
Success: Added custom field.

Короткие макросы для общих команд (превдонимы, алиасы)

Если вы часто выполняете одни и те же команды, вы можете определить для них алиасы для более удобного доступа.

Запустите все три команды проверки состояния с помощью одной команды check-all. В этом примере команда alias создает псевдоним check-all для текущего сеанса оболочки. Вы можете созранить такой алиас в ~/.bashrc или ~/.zshrc, чтобы всегда иметь его под рукой.

$ alias check-all='wp core check-update && wp plugin list --update=available && wp theme list --update=available'
$ check-all
+-----------------+-------------+-----------------------------------------------------------+
| version         | update_type | package_url                                               |
+-----------------+-------------+-----------------------------------------------------------+
| 4.7-beta4-39322 | minor       | https://wordpress.org/nightly-builds/wordpress-latest.zip |
+-----------------+-------------+-----------------------------------------------------------+
+-------------------------+----------+-----------+--------------+
| name                    | status   | update    | version      |
+-------------------------+----------+-----------+--------------+
| akismet                 | inactive | available | 3.1.8        |
| co-authors-plus         | inactive | available | 3.1.1        |
| wp-redis                | inactive | available | 0.2.2        |
| rest-api                | active   | available | 2.0-beta13.1 |
| wp-api-oauth1           | inactive | available | 0.2          |
+-------------------------+----------+-----------+--------------+
+----------------------+----------+-----------+---------+
| name                 | status   | update    | version |
+----------------------+----------+-----------+---------+
| p2                   | inactive | available | 1.4.2   |
+----------------------+----------+-----------+---------+

Сохранение вывода команды

Команды WP-CLI отправляют вывод как в STDOUT (вывод), так и в STDERR (ошибки), в зависимости от характера сообщения. Вы можете не заметить разницу между ними, потому что WP-CLI отображает их оба в вашей консольной оболочке. Однако, если вы хотите сохранить вывод в файл, это различие имеет значение.

Простое использование > приведет к записи STDOUT из команды в файл import.log.

$ wp import wordpress.wxr --authors=create > import.log

Инструкция 2>&1 перенаправляет STDERR в STDOUT. После чего вы также можете записать STDOUT в файл.

$ wp import wordpress.wxr --authors=create > import.log 2>&1

Когда вы сохраняете вывод в файл, вы не увидите вывод в текущем сеансе оболочки. Однако вы можете открыть второй сеанс оболочки и выполнить команду tail -f <file>, чтобы увидеть вывод по мере его добавления в файл.

В качестве альтернативы, чтобы не открывать две консоли, вы можете использовать команду tee, который пишет как в стандартный вывод, так и в файлы. Вам нужно только передать вывод команде и указать имя файла.

$ wp import wordpress.wxr --authors=create | tee import.log

Это выведет вывод на текущий экран оболочки, а также запишет его в файл журнала.

Обратите внимание, что если файл уже существует, он будет перезаписан. Если вы хотите добавить вывод в файл, используйте опцию -a (--append).

$ wp import wordpress.wxr --authors=create | tee -a import.log

--

Источник: https://make.wordpress.org/cli/handbook/references/shell-friends/