Ставя доменное имя в /etc/hosts
является дополнительным, и можно выполнить систему без любого вредного воздействия вообще.
Единственный недостаток пропуска его - то, что полностью определенное имя хоста системы не обнаружится правильно. Например, hostname -f
.
Путем обнаружение полностью определенных работ имени хоста:
uname -n
или hostname
./etc/hosts
(или независимо от того, что Вы имеете в /etc/resolv.conf
, и отступание к последним источникам, если не найденный в /etc/hosts
)./etc/hosts
./etc/hosts
, первая запись используется в качестве полностью определенного имени хоста.Короче говоря если Вы хотите, чтобы полностью определенное имя хоста работало, необходимо сделать также:
127.0.0.1 fully.qualified.hostname hostname localhost.localdomain localhost
или
127.0.0.1 localhost.localdomain localhost
1.2.3.4 fully.qualified.hostname hostname
Проблема не в рекурсии, а в перекручивании пунктов. Если попробовать так, как описано выше, то не получится:
$ targets=(aaa bbb ccc ddd)
$ for i in $targets; do echo $i; done
aaa
Чтобы зациклиться на массиве, нужно сгенерировать список элементов в массиве, например, по этой ссылке:
Так что
#!/bin/bash
# recur.sh
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in ${targets[@]}; do
echo $2" --> "$i
./$0 $i $2
done
exit 0
fi
echo "Target "$1" just received command '"$2"'"
exit 0
Другие уже указывали на проблему с синтаксисом, используемым при доступе к списку. Но это не единственная проблема с вашим скриптом. Вы также используете переменные без кавычек. При использовании $variablename
без кавычек, вы получите неожиданные результаты, если эта переменная содержит какие-либо символы, которые могут быть интерпретированы оболочкой.
Вот как я изменю ваш скрипт, чтобы избежать таких проблем:
#!/bin/bash
# recur.sh
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in "${targets[@]}"; do
echo "$2 --> $i"
"$0" "$i" "$2"
done
exit 0
fi
echo "Target $1 just received command '$2'"
exit 0
Вы должны сделать привычкой всегда помещать использование переменной внутри двойных кавычек, если только у вас нет очень веских причин не делать этого.
Проблема в том, что Вы не зациклилили все элементы в массиве, а только один элемент, потому что вместо ${targets[@]}
Вы использовали $targets
.
Попробуйте это исправление:
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in ${targets[@]} ; do
echo $2" --> "$i
echo "Target "$i" just received command '"$2"'"
done
fi
exit 0
Здесь не нужна рекурсия.