Предупреждение псевдонима по умолчанию для команды
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
bash
notification
зарегистрированный пользователь
источник
источник
notify-send Linux Ubuntu
, примерно так же, единственное отличие в том, чтоalert
показывает значок. Но я не понимаю, почему команда содержит sed, tail и historyОтветы:
Вы можете использовать справочные страницы, чтобы получить подробную информацию о том, что делают команды, объединенные здесь. Вот немного о назначении этих команд здесь:
Это вызвало бы вывод терминала или ошибку в соответствии с состоянием выполнения - успешно или неудачно, соответственно, последней команды; и результатом является значение
-i
переключателяnotify-send
для отображения значков.... чтобы выполнить последнюю команду.
и
sed
проанализировать текст, чтобы отобразить его сnotify-send
сообщением.Чтобы понять это, попробуйте следующее:
..это будет эхо- терминал .
..это ошибка эха .
А также,
... очень полезно знать значение выхода последней выполненной команды.
... показанный
echo
как простая демонстрация для использования$()
в комбо-команде.источник
notify-send
... состояние завершения последней команды проверяется со значением ..$?
Я включил это в правку ..Позвольте мне попытаться объяснить, что здесь происходит:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.Эта часть
"$([ $? = 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$//
удаляет предшествующие символы;
&
|
, любые символы табуляции и пробелы, а также слово «предупреждение».Это просто очистка последней выполненной команды от символов и слова «оповещение» в конце.
Так что если вы используете что-то вроде этого:
Он покажет предупреждение с предыдущей командой.
источник
Я думаю, что текущие ответы объясняют, как работают внутренние механизмы оповещения (что я и хотел узнать из любопытства и которое привело меня сюда). Но я думаю, что оригинальный OP спрашивает, для чего он полезен, и я постараюсь объяснить, как я понимаю, из приведенных выше комментариев.
Он в основном используется для оповещения о завершении команды, когда вы не можете сидеть и смотреть на терминал все время, ожидая его завершения. В соответствии с примером commend
sleep 10; alert
будет показано уведомление о команде (sleep 10
в данном случае) со значком терминала, если она успешна (сон 10 займет 10 секунд для завершения).Из этого вы можете видеть, что его следует использовать,
<command>; alert
когда вы заменяете команду своей командой. Мне лично приходится загружать видео каждый день через wget, потому что оно периодически выходит из строя. Поэтому я просто добавляю команду загрузки с предупреждением, чтобы немедленно уведомить меня о сбое, чтобы его можно было продолжить снова (мое предупреждение изменено, чтобы также подать звуковой сигнал, чтобы привлечь мое внимание).источник
Причина
sed
,tail
иhistory
есть, потому что это необходимо , чтобы получить сообщение , что вы набрали. (По какой-то причине) то, что вы ввели, не доступно напрямую через любую переменную. Следовательно, он должен использоватьhistory
для получения списка всего, что вы ввели,tail -n1
чтобы получить последнее, что вы ввели, и некоторое регулярное выражение, чтобы избавиться от команды «alert» в начале.Просто, чтобы расширить это, есть условная команда, которая проверяет,
$? = 0
верно ли это. Из того, что я могу сказать, если это правда, то это исходит от терминала, и должно рассматриваться как нормальное сообщение. В противном случае это следует считать ошибкой, и появится значок ошибки.источник
$0
дает вам первый аргумент для команды. Это может быть иначе в случае псевдонима, хотя.