Это URI для адреса электронной почты -, который браузер может использовать для вызова приложения электронной почты -для отправки электронной почты -на указанный адрес. Браузер должен предоставить параметр конфигурации для установки используемого приложения.
cron использует несвязанную переменную MAILTO (, т. е. MAILTO=...
), в своей конфигурации, чтобы знать, куда отправлять электронную -почту с выводом команд, которые он запускает, вместо того, чтобы отправлять все это пользователю root.
В bash 1 означает stdout, 2 означает stderr (стандартный поток ошибок)
/dev/null — это виртуальное устройство, в которое вы можете записывать что угодно, и оно будет потреблять все (, по сути, избавляясь от вывода ).
Таким образом, 2> /dev/null
означает, что перенаправить вывод ошибки этой команды в /dev/null. По сути это означает, что просто избавьтесь от сообщений об ошибках
Назначение 2>/dev/null
состоит в том, чтобы скрыть ошибки, вызванные grep
, путем перенаправления любых диагностических сообщений в/dev/null
(специальный файл устройства, который отбрасывает записанные в него данные ).
Файл /etc/passwd
вообще читается всеми пользователями, поэтому я не совсем понимаю, зачем нужно перенаправление потока ошибок. Однако, поскольку код использует grep
в операторе if
,вывод, который утилита может выдать (, строки, соответствующие $1
), могут быть нежелательными, и с >/dev/null
этот вывод будет отброшен. Поэтому я предполагаю, что 2
в коде является опечаткой и автор намеревался написать
#!/bin/sh
if grep -e "$1" /etc/passwd >/dev/null; then
echo "Pattern found - Job Over"
else
echo "Pattern not found"
fi
То есть к echo
любой строке, отбрасывая фактически совпавшие строки. -e
необходим, если строка в $1
начинается с дефиса. Также обратите внимание на исправленную строку #!
-.
Это также можно сделать без перенаправления:
#!/bin/sh
if grep -q -e "$1" /etc/passwd; then
echo "Pattern found - Job Over"
else
echo "Pattern not found"
fi
-q
заставляет grep
выйти, как только совпадение найдено, а также делает его тихим (не выводит совпадающие строки ).
Если это grep
для имени пользователя в /etc/passwd
, то с помощью
if getent passwd "$1" >/dev/null; then...; fi
был бы лучшим вариантом, так как использование простого grep
может найти имена пользователей, которые содержат строку в $1
в качестве подстрок, если вы не позаботитесь о правильном создании выражения (регулярное выражение фактически не отображается в вопрос ). Команда getent passwd
завершалась бы с нулевым статусом выхода, отличным от -, если данное имя пользователя не было найдено в базе данных passwd
.
Это также будет работать в системах, использующих базы данных NIS или LDAP для хранения информации о пользователях, но не будет работать в macOS (нет getent
утилиты ).