fishシェルで環境変数を指定してコマンドを実行したい - ねこものがたりのあとruby-jpで質問したところ、env
コマンドを教えていただきました。
仕事の合間に質問を投げっぱなしにしていて、いただいたレスポンスにリアルタイムで反応しきれなかったのですが、わいわいとしてて読み返すだけでも楽しい感じでした。
前回と今回のやり方
# 前回 $ set -x MESSAGE "wing it" $ env | grep MESSAGE MESSAGE=wing it $ ruby -e "puts ENV['MESSAGE']" # 今回 $ env MESSAGE="Ruby" ruby -e "puts ENV['MESSAGE']" Ruby
env
コマンドとは
Linuxコマンドの一つで環境変数の値を設定しつつ、同時に指定したコマンドを実行するコマンドです。
オプションなし、他のコマンドとの組み合わせなしの単体で実行すると環境変数の一覧が出力されます。printenvと同じ挙動。
$ env HOME=/Users/keiko LANG=ja_JP.UTF-8 LOGNAME=keiko MESSAGE=wing it (以下略)
MESSAGE=Ruby
かと予想したのですが、MESSAGE=wing it
となっています。
env 環境変数名=値 コマンド
は環境変数を一時的に設定してコマンドを実行するものだとのこと。
なので、前回のset -x MESSAGE "wing it"
では恒久的な環境変数が設定され、今回のenv MESSAGE="Ruby" ruby -e "puts ENV['MESSAGE']"
ではそれを一時的にRubyという値にしただけということですね。わかってきました!
参考:
【 env 】コマンド――環境変数を指定してコマンドを実行する:Linux基本コマンドTips(175) - @IT
slackのやり取りを残しておこう
知ってる方が「それはこうだよ」と答えを示してくださることもとても勉強になるのですが、こんなふうに「自分も調べて見たらこういうのがあったよ」と調べて共有してくださったり、「これはこうなのかな」と話が広がったりすることが、贅沢で恐縮でとってもありがたいし面白いです。
なので「質問」って、「わらないーおしえてー」と乞うだけにとどまらず、「こういうテーマのことが知りたいんだけどみんなどうかな」っていう話題を投げかけるようにお話に出してもよいのかもしれないと感じました。
なにはともあれみなさまありがとうございました!
supportチャンネル
shellチャンネル
最後に
環境変数の操作についての理解ができました!
ただ、各shell独自のコマンド、UnixのコマンドLinuxのコマンド、とあまり区別がついていないので、しばらくはそれを意識していきたいです。
せっかく結構前に松田さんにおすすめ頂いた『楽しいUnix』が積読化しているので、『なるほどUnix』が終わったら次はそれを読もうと思います!