ねこものがたり

いちにちいっぽ

fishシェルで環境変数を指定してコマンドを実行する方法を教えてもらいました

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チャンネル

f:id:neko314:20200208113351p:plain f:id:neko314:20200208113946p:plain

shellチャンネル

f:id:neko314:20200208114037p:plain

最後に

環境変数の操作についての理解ができました!

ただ、各shell独自のコマンド、UnixのコマンドLinuxのコマンド、とあまり区別がついていないので、しばらくはそれを意識していきたいです。

せっかく結構前に松田さんにおすすめ頂いた『楽しいUnix』が積読化しているので、『なるほどUnix』が終わったら次はそれを読もうと思います!