Rubyでちょっとしたツールを作っていまして、OS種別(LinuxかMacか)で実行できるコマンド(IPアドレスを取得)が異なるのでわけたいなと。
色々調べたものの、なかなか見つからない。ありそうなのに。。。
setコマンドを実行して環境変数を眺めているとOSTYPEってのがそれっぽい。
で、Rubyで実行したもののなぜかnilしか返ってこない。OSTYPEはBASHでセットされる環境変数らしい。。。のでダメなのか?
諦めかけたときに、たまたまunameコマンドって実行したらOS名(DarwinかLinux)が出てきた。ちなみにLinuxはAWS(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に聞いたけどダメだったんだよなぁ。。。まあ、そんなときもあるか。