Otra herramienta de consulta de DNS, dig
, es muy detallada de forma predeterminada, pero si la usa como dig +short
, obtiene solo las respuestas, una por línea:
$ dig +short unix.stackexchange.com
151.101.65.69
151.101.193.69
151.101.129.69
151.101.1.69
$ dig +short www.latimes.com
32975.edgekey.net.
e11929.e12.akamaiedge.net.
2.22.63.16
2.22.63.11
Si el dominio solicitado no existe, simplemente no devuelve nada:
$ dig +short gbnjk.com
$
В вашем коде есть две проблемы.
Расширение $COMPILE_FILTERS
не заключено в кавычки. Это означает, что его значение --filter="- js/editor/editorjs/*"
по умолчанию будет разбито на слова по пробелу (). Это слова --filter="-
и js/editor/editorjs/*"
. Затем слова будут подвергаться генерации имени файла (подстановке ), но в вашем случае это будет проблемой, только если у вас где-то есть файл, соответствующий шаблону js/editor/editorjs/*"
.
Разделение на два слова означает, что rsync
получит два аргумента , и не сможет правильно использовать первый из них (это то, на что ссылается ваше сообщение об ошибке ).
Вы решаете эту проблему, заключая расширение переменной в двойные кавычки.
Строка, которую вы сохраняете в переменной , включает двойные кавычки. Если вы двойные кавычки расширяете переменную, вы в основном указываете rsync
использовать фильтр"- js/editor/editorjs/*"
(с двойными кавычками и всем ). Это потому, что вы используете одинарные кавычки вокруг строки.
Вы решаете эту проблему, назначая правильную строку переменной:
COMPILE_FILTERS=--filter="- js/editor/editorjs/*"
или
COMPILE_FILTERS='--filter=- js/editor/editorjs/*'
Конечный результат:
COMPILE_FILTERS='--filter=- js/editor/editorjs/*'
rsync -a "$COMPILE_FILTERS" \
--filter="- *node_modules*" \
--filter="-.git*" \
--filter="- /**/.git*" \
"$src" "$dest"
Обратите внимание, что я также процитировал другие переменные, задействованные в коде.
См. также:
Если вы позже решите включить дополнительные фильтры в свою переменную, обязательно переключитесь на массив (в оболочке, которая их поддерживает):
filters=(
--filter="- js/editor/editorjs/*"
--filter="- *node_modules*"
--filter="-.git*"
--filter="- /**/.git*"
)
rsync --archive "${filters[@]}" "$src" "$dest"
В оболочке, которая не имеет именованных переменных массива (/bin/sh
, dash
), вы можете набирать меньше:
set -- \
--filter="- js/editor/editorjs/*" \
--filter="- *node_modules*" \
--filter="-.git*" \
--filter="- /**/.git*"
rsync --archive "$@" "$src" "$dest"
Вам нужен массив или список для правильной обработки отдельных аргументов фильтра. Попытка объединить несколько фильтров в одну строку была бы выполнима, но намного сложнее, так как вам нужно правильно обрабатывать разделение слов оболочки и подстановку имен файлов.