クロスプラットフォームでコンピュータ名を取得しますか?

クロスプラットフォームでコンピュータ名を取得しますか?

自分のコンピュータのログインメッセージを作成しており、/etc/bashrcコンピュータに挨拶してコンピュータ名を表示したいと思います。

これは私のコードです。

# (system stuff here)
echo "Welcome, $(whoami)."

どんなユーザーでも使用すると、login私が期待するものを得ることができますWelcome, avgjoe

しかし、出力したいですWelcome, avgjoe, to Tower of Nix。私のコンピュータ名は、(システム環境設定を介して)「Tower of Nix」に設定されています。

では、コンピュータをハードコードせずにコンピュータ名をどのように知ることができますかecho "Welcome, $(whoami), to Tower of Nix."

私はこれを試しましたが、hostname何も出力しません192.168.2.13

scutil --get ComputerName私が要求したものを正確に実行することがわかりましたが、Tower of Nixマニュアルページを見ると次のようにscutil指定されています。

歴史

このscutilコマンドは Mac OS X 公開ベータ版に表示されます。

したがって、Linux、* BSDなど、すべてのオペレーティングシステムでは機能しない可能性があります。

私の質問:すべてのコンピュータからコンピュータ名を取得する方法(またはほぼすべて)UNIXの派生物ですか?

答え1

すべてではありませんが、多くのUnixシリーズシステムにこのオプションがunameあります。n

    uname -n

答え2

Mac OS Xは、コンピュータのIPホスト名とはまったく異なる名前を保存して検索できる数少ないUnixシリーズシステムの1つです。への呼び出しを特別に処理することをお勧めしますscutil。失敗した場合は、より標準的な方法に戻ってくださいhostname

echo "Welcome, $(whoami), to $(scutil --get ComputerName 2>/dev/null || hostname)."

答え3

GNU/Linux のホスト名はファイルにあります。たとえば、.slackwareの行を変更してSlackwareでホスト名を編集できます/etc/HOSTNAME

私の提案は、このファイルをbashrcのコマンドにリンクすることです。システムにホスト名ファイルがない場合は、/etc簡単に作成できます。または、変数がログインしている人の名前で埋められているので、$USERnotを使用できます。whoamiUSER

コマンドは次のとおりです。

echo "Welcome, $USER, to `cat /etc/HOSTNAME`"

関連情報