Erlangを開始するときに'-name'
または'-sname'
のいずれかを指定する必要がありますVM指定された文字列が完全修飾名(FQDN)であるかどうかによって異なります。それを検証する最も迅速で環境に依存しない方法ですか?regex式ではなくbashコマンド('getent'
や'nslookup'
など)を使用することに興味があります。Ubuntu、FreeBSDで機能する場合に最適です。およびSolarisは変更なしで、bashの'if'
で簡単に使用できます。
ホストは機能しているようです:
jalderman@mba:/tmp$ cat test.sh
#!/bin/bash
for h in "bert" "ernie" "www.google.com"
do
Host $h 2>&1 > /dev/null
if [ $? -eq 0 ]
then
echo "$h is a FQDN"
else
echo "$h is not a FQDN"
fi
done
jalderman@mba:/tmp$ ./test.sh
bert is not a FQDN
ernie is not a FQDN
www.google.com is a FQDN
残念ながら、コメントすることはできませんが、これは実際には受け入れられた回答へのコメントです。ソリューションは、提供された引数が本当にFQDNであるかどうかをチェックしません。実際に解決できる単純なホスト名も修飾されます(最も単純な例:「localhost」)。したがって、質問がfqdnではなく、単に解決する名前である場合は、それに応じて質問のタイトルを変更する必要があります。実際にソリューションに追加するには:fqdnが本当に必要な場合は、次のように、指定された名前のドットを確認するだけです。
is_fqdn() {
hostname=$1
[[ $hostname == *"."* ]] || return 1
Host $hostname > /dev/null 2>&1 || return 1
}
これでも「localhost。」は使用できますが、技術的にはfqdnです。
/ usr/bin/Hostの使用は私の好みには遅すぎると思います。私の目的では、文字列にドットが含まれているかどうかを知るだけで済みます。 https://unix.stackexchange.com/questions/63361/test-if-a-string-has-a-period-in-it-with-bash を参照してください
私はこれをドメイン名の検証に使用します。
#!/bin/bash
DOMAIN=example.com
[ -z "$(Dig +short "$DOMAIN")" ] && echo "$DOMAIN could not be looked up"
Dig
を取得するには:
apt-get install dnsutils
yum install bind-utils
ホスト名の「ndots」オプションを使用すると、すべてを1つのコマンドで実行できます。
Host -N 0 $hostname
これにより、/ etc /resolv.confのsearchまたはdomainディレクティブにリストされているドメインは追加されません。
例を使用して更新:
文字列がFQDNであるかどうかを知りたい、文字列を含む変数「hostname」があるとします。単純な「ホスト」を使用して文字列を試行し、見つからない場合は「/etc/resolv.conf」から「検索」と「ドメイン」を追加します。
$ hostname=www
$ Host $hostname
www.example.com has address 192.168.0.1
$ Host -N 0 $hostname
Host www not found: 3(NXDOMAIN)
$ echo $?
1
つまり、「www」はnot FQDNです。 FQDNの場合は、「ホスト」によって検出されます。
別の更新:
私はLinuxを使用していますが、「Host」コマンドはFreeBSDの場合と同じであると想定しています。