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

9

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

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

зарегистрированный пользователь
источник
Единственное, о чем я могу думать, это просто сделать создание уведомлений проще ... может быть?
saiarcot895
@ saiarcot895 попробуй notify-send Linux Ubuntu, примерно так же, единственное отличие в том, что alertпоказывает значок. Но я не понимаю, почему команда содержит sed, tail и history
Registered User

Ответы:

8

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

"$([ $? = 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как простая демонстрация для использования $()в комбо-команде.

точный
источник
1
поэтому этот псевдоним можно использовать, чтобы сообщить пользователю, успешно ли выполнена команда или нет, но в графическом режиме.
Зарегистрированный пользователь
да, он будет уведомлять об успешном или неуспешном выполнении графически, используя notify-send... состояние завершения последней команды проверяется со значением .. $?Я включил это в правку ..
точно
7

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

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, без ошибок. Или возвращает «ошибку», если код выхода не был 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 блока сед.

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

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

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

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

echo "Hello alert" | alert

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

c0rp
источник
3

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

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

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

chesedo
источник
0

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

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

saiarcot895
источник
Он не избавится от тревоги , он останется в уведомлении.
Зарегистрированный пользователь
1
Если вы отвечаете «по какой-то причине», это часто не очень хороший ответ;)
Requist
@Requist: Я добавил «по какой-то причине» для этого конкретного утверждения, потому что у меня сложилось впечатление, что он $0дает вам первый аргумент для команды. Это может быть иначе в случае псевдонима, хотя.
saiarcot895