Хорошо, давайте разложим это на кусочки:
$HOME
$LOGUSER
Сценарий может принимать аргумент (или несколько). Аргументы командной строки доступны в позиционных параметрах $1
, $2
и т.д. Поскольку мы получим только один аргумент, нас интересует только то, что находится в $1
.
name="$1"
Чтобы проверить, существует ли имя, мы можем использовать
if [ -e "$name" ]; then ... fi
В данном случае нас интересует, существует ли имя не:
if [ ! -e "$name" ]; then
echo 'Name does not exist in directory' >&2
exit 1
fi
Поскольку мы выводим диагностическое сообщение (в данном случае сообщение об ошибке), мы делаем это в стандартный поток ошибок, перенаправляя вывод из echo
с помощью >&2
. Мы также завершаем сценарий с ненулевым статусом выхода, чтобы сообщить, что что-то пошло не так.
Если мы хотим убедиться, что файл не только существует, но и что это обычный файл, то есть не каталог, не узел устройства или что-то еще, измените -e
на -f
(читайте руководство test
).
Чтобы найти все символические ссылки в нашем домашнем каталоге, мы можем использовать
find "$HOME" -type l
С помощью bash
или ksh93
мы можем просмотреть эти файлы и сравнить их с файлом, который нам дал пользователь using
if [[ "$name" -ef "$link" ]]; then ... fi
где $name
будет $1
, а $link
будет именем символической ссылки, полученной из find
. Оператор -ef
вернет истинное значение, если два операнда ссылаются на один и тот же файл (после разрешения всех символических ссылок).
Можно объединить find
с приведенным выше тестом следующим образом:
find "$HOME" -type l |
while read -r link; do
if [[ "$name" -ef "$link" ]]; then
printf '%s\n' "$link"
fi
done
Чтобы отправить электронное письмо, используйте команду mail
. Это может быть добавлено в конец предыдущего конвейера:
find "$HOME" -type l |
while read -r link; do
if [[ "$name" -ef "$link" ]]; then
printf '%s\n' "$link"
fi
done |
mail -s "These are the links" "$LOGUSER@localhost"
$LOGUSER
будет содержать ваше имя пользователя. Используйте "$(id -un)"
, если $LOGUSER
по какой-то причине не установлен должным образом, или просто замените всю строку на любой адрес электронной почты, который вы хотите использовать.
Я сам разобрался :вам следует использовать
mpd_music_dir = "/home/sunqingyao/Music"
вместо
mpd_music_dir = /home/sunqingyao/Music
Нельзя опускать кавычки.