Как правильно оформить эту конвейерную команду для “watch”?

Вопрос или проблема

Я хочу использовать команду watch, чтобы непрерывно отслеживать следующую piped-команду, но watch всегда не срабатывает, независимо от того, как я ее оформляю:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | sed -n '/title/{n;p}' | cut -d '"' -f 2

Перейдите на двойные кавычки в вашей команде, чтобы упростить себе жизнь:

watch 'dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | sed -n "/title/{n;p}" | cut -d \" -f 2'

.

Ответ или решение

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

Описание проблемы

Вы хотите использовать команду watch для непрерывного выполнения следующего конвейера:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | sed -n '/title/{n;p}' | cut -d '"' -f 2

Тем не менее, при попытке использования watch ваша команда не срабатывает должным образом. Это происходит из-за некорректного экранирования кавычек.

Решение

Во-первых, важно понимать, как кавычки обрабатываются в командной оболочке. Когда вы используете одинарные кавычки ('), все внутри них интерпретируется буквально. Поэтому если ваша команда содержит двойные кавычки ("), они будут трактоваться как часть строки, а не как ограничители. В отличие от этого, использование двойных кавычек позволяет интерпретировать переменные и некоторые специальные символы.

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

watch "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | sed -n '/title/{n;p}' | cut -d '\"' -f 2"

Разбор команды

  1. Команда watch: Она используется для выполнения заданной команды с определенным интервалом времени, чтобы вы могли отслеживать изменения вывода.

  2. Команда dbus-send: Эта команда отправляет сообщения через D-Bus и используется для взаимодействия с сервисами в Linux (в данном случае, с медиаплеером Spotify).

  3. Пайп (|): Он соединяет выход одной команды со входом другой. Это позволяет последовательно обрабатывать данные.

  4. sed и cut: Эти утилиты обрабатывают текст. Ваша команда sed находит строку с заголовком, а cut разделяет строку и извлекает нужное значение из кавычек.

Итог

Теперь, используя команду с правильно оформленными кавычками, вы сможете беспрепятственно запустить watch и отслеживать изменения:

watch "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:org.mpris.MediaPlayer2.Player string:Metadata | sed -n '/title/{n;p}' | cut -d '\"' -f 2"

Таким образом, вы сможете эффективно использовать watch для мониторинга метаданных вашего медиаплеера без проблем с экранированием.

Оцените материал
Добавить комментарий

Капча загружается...