質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

10990閲覧

環境変数の定義された場所を知る良い方法

Mild_Boss

総合スコア13

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/12/08 12:14

編集2018/12/08 13:15

Linux で環境変数の定義場所を知る良い方法ってありますか?

例えば、ターミナル上で printenv コマンドを実行すると現在の環境変数の一覧を知ることが出来ます。

それらがどこで"定義"されたがを知る良い方法ってありますか?

環境変数を指定すると、それがどこで定義されたのかさっと表示するようなコマンドや良い方法はないのでしょうか?
(後述しますが、printenv や grep で総当りする方法は試しましたが時間がかかるので"良い"方法とは思えません)

例えばですが、
type というコマンドは引数に指定されたコマンドがシェルのビルトイン関数か、もしそうでなかったらこのパスに存在するということを示してくれます。

bash

1$ type cd 2cd is a shell builtin 3$ type python 4python is /usr/bin/python

このようにさっと(もしくは2桁秒程度の時間で)環境変数の定義情報について知らせてくれる方法はないのでしょうか…?
(envinfo HOGE と入力したら「HOGE was defined in /etc/hoge/foo.conf」と出力されるような…)

補足:
試しに、printenv で表示される環境変数に対して /etc とホームディレクトリ配下の全テキストファイルを grep/fgrep してそれらが定義されている箇所があるかを調べるシェルスクリプトを作ってみました。
ただし、すべての環境変数でこれをやるには時間がかかること(10分程度)といくつかの環境変数(e.g. $COLOURFG, $OLDPWD)が見つかりませんでした。
OLDPWD や PWD などはログインシェルが勝手に定義してると知っているのですが、それ以外のものもあります。

ぜひ、良い方法をご存知の方はお教えいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

そういうことを調べる方法はないので頑張って探すしかないですね

投稿2018/12/08 15:50

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mild_Boss

2018/12/09 17:42

やはり、そうですか。 どうもありがとうございました。
guest

0

ベストアンサー

ログイン直後ならば、使用しているシェルによって
実行されるものは少ないので、そちらの知識を
調べてみてはいかがでしょうか。

「なんのために」環境変数を設定した対象が
知りたいのかを説明された方が回答も
つきやすいと思います。
また、同じ環境変数が複数個所で設定されている
可能性を考えたら、一意な結果を出力するのは
むずかしいと考えます。

投稿2018/12/09 02:25

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mild_Boss

2018/12/09 17:42

理由としましては、ログインシェルや PAM が設定ファイル読み込み定義した環境変数の他に 自分が把握してない経路の環境変数があるのが気になって それぞれの環境変数を逐一 Google 検索したり力技で総当りで検索するのが厭になったからです。 環境変数が名前と値以外の情報を持っていないようなので、そうやって探すしか無いのでしょうが なにかうまい方法があればと思い質問しました。 仕組み上、しょうがないということが分かっただけ収穫と捉えます。 どうもありがとうございました。
guest

0

Raspbianで確認したものですが、これですか?

echo $変数名
echo $HOME /home/pi

###追記
linuxは、結構細かく分かれます。(ubuntu,freebsd,dibian,openbsd,mac(これは微妙))
なので、細かく書くようにするといいと思います。

投稿2018/12/08 13:00

編集2018/12/08 13:02
yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mild_Boss

2018/12/08 13:05

いえ、環境変数の値を表示したいのではなく、"定義"した場所がしりたいのです。 例えば、HOME という環境変数は多くの場合ログインシェル(bash など)が定義しています。 しかし、そういうシェルが定義したものではない環境変数はどこかで定義されているはずです。 それがどこのどのファイルによって定義されたものなのかを知りたいのです。
Mild_Boss

2018/12/08 13:08

追記に対して返答します。 具体的にこの環境変数がどこで定義されているかという質問ではありません。 環境変数がどこで定義されているかを総当りではなく一般的に調べる手法が Linux(上にあります BSD や macOS X みたいな Unix ライクでもいいのですが)にあるのかという質問です。 例えば、type コマンドは引数に指定されたコマンドがシェルのビルトイン関数か、もしそうでなかったらこのパスに存在するということを示してくれます。 環境変数に対してそのような情報を示してくれるような手法が既にあるのかということが知りたいです。
yukkuri

2018/12/08 13:09

定義場所って書いてありましたね。すいません。
Mild_Boss

2018/12/08 13:15

いえ、多少分かりづらかったかもしれませんので質問を修正しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問