Использование псевдонима по умолчанию «alert»

Псевдоним по умолчанию Alert предназначен для команды

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

Выполнение alert дает уведомление с текстом Alert и значок терминала. Выполнение этого с одним параметром, подобным alert !!!!!, дает уведомление с текстом Alert !!!!! и !!!!! .

Итак, в чем разница между простой notify-send командой и этим сложным псевдонимом, который использует notify-send, echo, history, tail и sed ?

В каких ситуациях этот псевдоним полезен или он просто создан для каламбура (Что-то вроде использования sudo sudo sudo sudo sudo apt-get install

Я использую Ubuntu 12.10

8
задан 8 March 2014 в 05:00

4 ответа

Вы можете использовать справочные страницы, чтобы получить подробную информацию о том, что делают команды, объединенные здесь. Вот немного о назначении этих команд здесь:

"$([ $? = 0 ] && echo terminal || echo error)"

Это будет отражать ошибку терминала или ошибку в соответствии со статусом выполнения - успешно или сбой соответственно последней команды; и результатом является значение переключателя -i в notify-send для отображения значков.

history|tail -n1

.. чтобы выполнить последнюю команду.

и sed, чтобы проанализировать текст для отображения его с сообщением notify-send.


Чтобы понять это, попробуйте следующее:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

.. это повторило бы терминал .

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

.. это повторило бы ошибку .

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

И,

echo $?

.. очень полезно знать значение выхода последней выполненной команды.

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

.. вложено echo как простая демонстрация для использования $() в комбо-команде.

0
ответ дан 8 March 2014 в 05:00

Позвольте мне попытаться объяснить, что здесь происходит:

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1 --urgency=low

-u, --urgency = LEVEL Указывает уровень срочности (низкий, нормальный, критический).

2 -i "$([ $? = 0 ] && echo terminal || echo error)".

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

Эта часть "$([ $? = 0 ] && echo terminal || echo error)". $? - последняя возвращенная ошибка (или успех). Таким образом, он возвращает текст «терминал», если код завершения последней команды был 0, без ошибок. Или возвращает «error», если код выхода не был 0.

И, наконец, мы получаем значок «терминал» или «ошибка».

3 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1 возвращает последнюю команду из истории.

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') это может быть разделено на 2 блока sed.

3.1. sed 's/^\s*[0-9]\+\s*//' удалите все предшествующие пробелы и табуляции, все числовые после этого, а также удалите пробелы и табуляцию в конце.

[+1135] 3.2. [+1135] s/[;&|]\s*alert$// удаляет предшествующие символы ; & |, любые символы табуляции и пробелы и слово «оповещение».

Это просто чистая последняя выполненная команда из символов, и слово «alert» в конце.

Так что если вы используете что-то вроде этого:

echo "Hello alert" | alert

Он будет показывать предупреждение с предыдущей командой.

0
ответ дан 8 March 2014 в 05:00

Я думаю, что текущие ответы объясняют , как работают внутренние механизмы оповещения (что я и хотел выяснить из любопытства и которое привело меня сюда). Но я думаю, что оригинальный OP запрашивает , для чего это полезно, для чего я постараюсь объяснить, как я понимаю, из приведенных выше комментариев, его декларация.

Он в основном используется для оповещения о завершении команды, когда вы не можете сидеть и смотреть на терминал все время, ожидая его завершения. В соответствии с примером commend sleep 10; alert будет показано уведомление о команде (в данном случае sleep 10) со значком терминала, если она успешна (сон 10 займет 10 секунд для завершения).

Из этого вы можете видеть, что он должен использоваться как <command>; alert, где вы заменяете команду своей командой. Мне лично приходится загружать видео каждый день через wget, потому что оно периодически выходит из строя. Поэтому я просто добавляю команду загрузки с предупреждением, чтобы немедленно уведомить меня о сбое, чтобы его можно было продолжить снова (мое предупреждение изменено, чтобы также подать звуковой сигнал, чтобы привлечь мое внимание).

0
ответ дан 8 March 2014 в 05:00

Причина sed, tail и history в том, что ей нужно получить сообщение, которое вы напечатали. (По какой-то причине) то, что вы ввели, не доступно напрямую через любую переменную. Поэтому он должен использовать history, чтобы получить список всего, что вы ввели, tail -n1, чтобы получить последнее, что вы ввели, и некоторое регулярное выражение, чтобы избавиться от команды «alert» в начале.

Просто, чтобы расширить это, есть условная команда, которая проверяет, верно ли $? = 0. Из того, что я могу сказать, если это правда, то это исходит от терминала, и должно рассматриваться как нормальное сообщение. В противном случае это следует считать ошибкой, и появится значок ошибки.

0
ответ дан 8 March 2014 в 05:00

Другие вопросы по тегам:

Похожие вопросы: