memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

RubyでOS種別で処理をわける方法

Rubyでちょっとしたツールを作っていまして、OS種別(LinuxMacか)で実行できるコマンド(IPアドレスを取得)が異なるのでわけたいなと。

色々調べたものの、なかなか見つからない。ありそうなのに。。。

setコマンドを実行して環境変数を眺めているとOSTYPEってのがそれっぽい。

で、Rubyで実行したもののなぜかnilしか返ってこない。OSTYPEはBASHでセットされる環境変数らしい。。。のでダメなのか?

諦めかけたときに、たまたまunameコマンドって実行したらOS名(DarwinLinux)が出てきた。ちなみにLinuxAWS(Unbuntu)で実行して確認しただけです。

ということで、以下で行けることがわかったよ、という話しでした。

cmd = (`uname`[0] == 'L') ? `hostname -i` : `curl ipecho.net/plain; echo`
ipaddr = cmd.chomp.split(' ')
ipaddr = ipaddr[-1] if ipaddr.class == Array

1行目がOS種別でコマンドをわけているところ。unameコマンドを実行した結果、返ってきた文字列の最初の文字がLならLinuxのはずなので、hostname -iを実行、それ以外はMacなので〜を実行する感じです。

ちなみにですが、AWSではhostname -iを実行するとIPアドレスが空白区切りで2つ返ってきました。ので、splitして1つの場合と2つ以上の場合に対応させているのが2〜3行目です。

はい。

ChatGPTに聞いたけどダメだったんだよなぁ。。。まあ、そんなときもあるか。