Действительно необходимо квалифицировать то, под чем Вы подразумеваете, "определяет доменное имя" - существует по крайней мере три совершенно других интерпретации "домена", который мог бы применяться.
Вы хотите установить Windows Domain, который система будет использовать для сетей SMB.
Я не знаю бесцеремонно, как сделать это, но это, вероятно, включило бы редактирование Вашей конфигурации Samba; http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/domain-member.html#ads-member, вероятно, был бы хорошим местом, чтобы начать смотреть
Вы хотите определить имя DNS по умолчанию (поиск)
ответ llua выше устанавливает доменный компонент имени хоста, но если Вы хотите ping myhost
для нахождения myhost в локальном домене DNS скажем, это - accounting.example.com, Вам нужна поисковая строка в/etc/resolv.conf, например:
search accounting.example.com
В некоторых системах/etc/resolv.conf управляет resolvconf система (это верно в моей системе Ubuntu, не уверено в Debian в целом или Crunchbang в особенности) - если/etc/resolv.conf является символьной ссылкой на/etc/resolvconf/run/resolv.conf затем, необходимо, вероятно, редактировать/etc/network/interfaces, который должен содержать строку файла конфигурации как это:
iface eth0 inet static
address 192.0.2.3
netmask 255.255.255.0
gateway 192.0.2.1
dns-nameservers 192.0.2.1 198.51.100.1
dns-search accounting.example.com example.com
Если Вы используете DHCP для установки локальной сетевой конфигурации, демон DHCP должен настроить и локальное имя хоста и путь поиска сопоставителя DNS автоматически - можно найти, что это - лучшее решение или, чем llua's или, чем мой, по крайней мере, если существует локальный сервер DHCP, и это правильно настроено для предоставления информации о поиске DNS.
Вы хотите установить NIS (YP) доменное имя, используемое для passwd/group/hosts/etc. поисков в некоторых системах с настроенным совместным доступом к файлам NFS.
Вы могли бы сделать это путем редактирования/etc/domainname, и/или сразу (но временно) с domainname NISNAME
команда. Обратите внимание, что доменное имя NIS не должно совпадать с доменным именем DNS (действительно, некоторые рекомендуют, чтобы это не было), хотя по крайней мере в некоторых случаях доменное имя NIS будет определено автоматически к доменному компоненту имени хоста если не иначе настроенный.
Я полагаю, что Вы на самом деле хотите:
#! /bin/sh -
until rv "$@"; do
continue
done
Вы обычно не должны получать фактическое значение статуса выхода ($?
) ни знать, действительно ли 0 TRUE или FALSE средств. until
, while
, if
... конструкция заботится об этом. continue
выше только для четкости, можно поместить любую команду там, включать не одну: :
.
Никогда не используйте $*
или $@
неупомянутый, который не имеет смысла.
Вы сохраните вывод из сценария в "r", код выхода был бы в $?.
Поэтому просто добавьте строку, прежде чем "сделано"
result=$?
В выражении
r=`vx $* < \`tty\` > \`tty\``
Bash интерпретирует vx
как исполняемое имя файла, которому Вы передаете все ($*
) из аргументов, переданных текущему сценарию после расширения оболочки. Например, если аргументы сценарию были * `ls /dev`
затем список аргументов, переданный vx, будет названиями всех файлов в текущем каталоге плюс названия всех файлов в /dev
. Количество аргументов совпадет с числом для имен файлов.
vx
как предполагается, принимает вход на его стандартном входе.
tty
исполняемый файл, который возвращает строку, которую Bash интерпретирует как имя файла.
Обратите внимание что первый вызов tty
мог возвратить другое имя файла, чем второй вызов', например, если tty
производит имя файла на основе некоторого внешнего условия, такого как содержание файла с именем, произведенным предыдущим вызовом, или на основе метки времени или другого внешнего условия, которое могло измениться.
Выражение r=`...`
присваивает стандартный вывод команды backticked к r
. Возвращаемое значение backticked выражения находится в $?
.
Начиная со стандартного вывода vx
перенаправляется к имени файла, произведенному вторым вызовом tty
, значение r
всегда будет пусто (r=
) который совпадает с r=0
в выражении [[ r -ne 0 ]]
. Результат состоит в том, что нет никакой ситуации, куда цикл может работать несколько раз.
$*
не список аргументов, это - список файлов, соответствующих шаблонам, следующим из дальнейшего разделения аргументов на символах $IFS. Вам нужно "$@"
для списка аргументов. деактивация
– Stéphane Chazelas
02.03.2013, 21:49
tty
возврат вызова другой результат? Их stdin является тем же.
– Stéphane Chazelas
02.03.2013, 21:57
"$*"
был бы единственный аргумент строки. Попытайтесь назвать сценарий с теми тремя аргументами: the-script 'a b' '*'
и посмотрите, сколько передается rv
, и теперь сравните "$@"
. strace -fe execve
может помочь.
– Stéphane Chazelas
02.03.2013, 22:12