はじめに

こんにちは!今回はenvコマンドについて解説します。

envは環境変数を表示・設定・実行するコマンドです。シェルの環境変数を確認したり、特定の環境変数を設定した状態でプログラムを実行したりできます。

環境設定って、何かやることが多いんですが、このコマンドで簡単に管理できますよ。

envコマンドとは

envは、環境変数を操作・表示する外部コマンドです。

主な使い方は3つあります:

  1. 環境変数をすべて表示 - 現在の環境に設定されている変数を一覧表示
  2. 環境変数を設定して実行 - 特定の環境変数を設定した状態でプログラムを実行
  3. 環境変数をクリアして実行 - 環境変数をすべてクリアした状態でプログラムを実行

使い道が多くて、実務的に活躍するコマンドです。

基本構文

1
env [オプション] [変数=] [コマンド]

変数を設定しない場合は、現在の環境変数をすべて表示します。

主なオプション

オプション 説明
-i 環境をクリア(新しい環境変数を指定しない限り)
-u 変数名 指定した環境変数を削除
-0 NUL文字で出力を区切る
--ignore-environment 環境をクリア(-iと同じ)
--unset=変数名 指定した環境変数を削除

使用例

例1: 環境変数をすべて表示

1
env

実行結果:

1
2
3
4
5
6
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
HOME=/home/user
USER=user
SHELL=/bin/bash
LANG=ja_JP.UTF-8
...(多数の環境変数が表示される)

現在設定されているすべての環境変数を表示します。

例2: 特定の環境変数を確認

1
env | grep PATH

実行結果:

1
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

grepと組み合わせて、特定の環境変数だけを確認できます。

例3: 環境変数を設定してコマンドを実行

1
env VAR1=hello VAR2=world printenv

実行結果:

1
2
3
4
...(既存の環境変数)
VAR1=hello
VAR2=world
...

新しい環境変数を設定した状態でprintenvコマンドを実行します。もとの環境には影響しません。

例4: スクリプトに環境変数を渡して実行

1
env LANG=C LC_ALL=C ./myscript.sh

実行結果:

1
(スクリプトの実行結果)

スクリプト実行時に環境変数を上書きします。ロケール設定を変更したい時に便利。

例5: 環境変数をクリアして実行

1
env -i /bin/sh

実行結果:

1
(プロンプト)

すべての環境変数をクリアした新しいシェルを起動します。テストや検証に使います。

例6: 環境変数をクリアして最小限の変数だけ設定

1
env -i PATH=/bin:/usr/bin /bin/sh

実行結果:

1
(プロンプト)

環境をクリアしつつ、PATHだけ指定して実行します。

例7: 複数の環境変数を設定

1
env HOME=/tmp USER=testuser DISPLAY=:0 printenv | grep -E "HOME|USER|DISPLAY"

実行結果:

1
2
3
HOME=/tmp
USER=testuser
DISPLAY=:0

複数の環境変数をまとめて設定できます。

例8: 環境変数を削除して実行

1
env -u USER printenv | grep USER

実行結果:

1
(何も表示されない)

USER環境変数を削除した状態で実行します。

例9: envコマンドで Pythonスクリプトを実行

1
env PYTHONUNBUFFERED=1 python3 script.py

実行結果:

1
(スクリプトの出力)

Pythonの出力バッファリングを無効にして実行します。ログ出力をリアルタイムで見る時に便利。

例10: 言語設定を変更してコマンド実行

1
env LANG=en_US.UTF-8 locale

実行結果:

1
2
3
4
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
...

言語ロケール設定を英語に変更してコマンドを実行します。

Tips・注意点

元の環境に影響しない

1
2
env VAR=value command
# 実行後、VARは元の環境に存在しない

envで設定した環境変数は、そのコマンド実行中だけ有効です。シェルの環境は変わりません。

printenvコマンドとの違い

1
2
3
# 同じ結果が得られる
env
printenv

envprintenvはほぼ同じですが、envのほうがより多機能です。

-iオプションでテスト用環境構築

1
env -i /bin/bash

依存関係をテストする時に、クリーンな環境を作れます。

実践的な使い方

本番環境でのログ出力の調整

1
env NODE_ENV=production node app.js

Node.jsアプリケーションを本番モードで実行。環境変数で動作を切り替えます。

Dockerのようなコンテナ内での実行

1
env -i HOME=/root USER=root /bin/sh

最小限の環境でシェルを起動。テスト環境のシミュレーション。

スクリプトをテスト環境で実行

1
env HOME=/tmp /path/to/script.sh

ホームディレクトリを一時フォルダに変更してスクリプト実行。本環境に影響しません。

複数の設定で異なるプログラムを実行

1
2
env DEBUG=1 ./debug_mode.sh
env DEBUG=0 ./release_mode.sh

フラグで動作モードを切り替えるスクリプトに便利。

まとめ

envコマンドのポイント:

  • 環境変数をすべて表示または操作するコマンド
  • オプションなし: 現在の環境変数をすべて表示
  • 変数=値: 環境変数を設定した状態でコマンドを実行
  • -i: 環境変数をクリアして実行
  • -u: 特定の環境変数を削除
  • よく使う組み合わせ: env VAR=value command, env -i /bin/sh

元の環境に影響しないので、テストや一時的な設定変更に最適ですよ!