利用できるオプションの異なる hostname コマンドに対応する
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 "$@"