Использование псевдонима по умолчанию & ldquo; alert & rdquo;

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 и этим сложным псевдонимом, который использует уведомления-send, echo, history, tail и sed?

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

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

1
задан 8 March 2014 в 07:00

3 ответа

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

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 Определяет уровень срочности (низкий, нормальный , критический).

1 -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.

И, наконец, мы получаем значок «terminal» или «error».

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 sed 's/^\s*[0-9]\+\s*//' удалить все предшествующие пробелы и вкладки, все численные после этого, а также удалить пробелы и вкладки в конце.

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

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

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

echo "Hello alert" | alert

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

7
ответ дан 24 May 2018 в 11:34

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

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

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

2
ответ дан 24 May 2018 в 11:34

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

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

0
ответ дан 24 May 2018 в 11:34
  • 1
    Он не избавляется от alert , он останется в уведомлении. – Registered User 20 February 2014 в 19:35
  • 2
    Если вы ответите «по какой-то причине», это часто не очень хороший ответ;) – Requist 20 February 2014 в 19:39
  • 3
    @Requist: Я добавил «по какой-то причине». для этого конкретного оператора, потому что у меня создалось впечатление, что $0 дает вам первый аргумент для команды. Тем не менее, это может быть иначе в случае псевдонима. – saiarcot895 20 February 2014 в 20:11

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

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