hostname コマンドには複数の形態があるためたまに困ることがあります。
困ること
- MSYS には
net-toolsが入ってないcoreutilsのhostnameが入ってる- 特に Git for Windows のことです
- CentOS や Debian には
net-toolsのhostnameが入ってる- ただし
net-toolsとは独立したパッケージになってる
- ただし
- 利用できるオプションが違う
- 前者のコマンドには
--helpと--versionしかオプションがない - 後者のコマンドにはいろいろオプションがある
- 前者のコマンドには
という理由で、後者の存在をあてにしているスクリプトの実行に失敗する場合があります。
ワークアラウンド
- 共通するオプション
--versionを指定したときの出力文字列を解析します coreutilsが含まれているならcoreutils版で、そうでないならnet-tools版です
手元では環境変数 PATH の前のほうに(bin より前)、次のようなラッパースクリプトを置くことにしてます。
#!/bin/bash
# hostname
if [[ ! -e /bin/hostname ]]; then
echo "${HOSTNAME}"
exit
fi
if /bin/hostname --version | grep coreutils >/dev/null 2>&1; then
/bin/hostname
exit
fi
/bin/hostname "$@"