env – 環境変数を設定/削除してコマンドを実行、または環境を一覧表示する

環境変数

env は環境変数を一時的に変更してコマンドを実行したり、引数がなければ現在の環境変数を一覧表示するコマンドです。
実務では「クリーンな環境での起動」「一時的な設定でのテスト」「shebang で実行ファイルを PATH から探す」などに使います。

構文(Syntax)

# 基本形(GNU coreutils)
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

# 代表例
env VAR=value command arg1 arg2
env -i PATH=/usr/bin:/bin LANG=C command
env -u NAME command
env -C /workdir -S 'python3 -O' script.py
  • NAME=VALUE を並べると、その設定を反映した環境で COMMAND が起動されます。
  • 引数が何もなければ、現在の環境を NAME=VALUE 形式で一覧表示します。

主なオプション一覧

オプション説明使用例
-i, --ignore-environment空の環境から開始(最低限の PATH 等を自分で設定)env -i PATH=/usr/bin:/bin bash -c 'command -v ls'
-u NAME, --unset=NAME変数 NAME削除して実行env -u http_proxy curl https://example.com
-C DIR, --chdir=DIR実行前に 作業ディレクトリを変更env -C /srv/app npm start
-S STRING, --split-string=STRING文字列を空白区切りで分割して引数化(shebang向け)env -S 'python3 -O' -- version
-P PATH, --path=PATHCOMMAND の探索に使う PATH を一時指定(環境の PATH は変更しない)env -P /opt/bin:/usr/bin mytool
-0, --null環境一覧の各行末を NUL 文字で出力(パイプで安全)`env -0
-v, --debug起動時の探索や設定を詳細表示env -v -P /usr/local/bin prog
-, (単体のハイフン)-i と同義(空の環境から)env - PATH=/usr/bin printenv PATH
--help, --versionヘルプ/バージョン表示env --help

実装によって対応オプションが異なります(GNU、BSD、BusyBox など)。上表は主に GNU 版を前提にしています。

実行例

一時的に環境変数を設定して実行

説明: NODE_ENV=production でアプリを起動します。
コマンド:

env NODE_ENV=production PORT=8080 node server.js

完全にクリーンな環境から起動(最低限の PATH を付与)

説明: 他の変数の影響を避けたい検証時に。
コマンド:

env -i PATH=/usr/bin:/bin LANG=C.UTF-8 bash -lc 'printenv | sort | head'

特定の変数だけ外して実行

説明: プロキシ設定を外して curl を実行します。
コマンド:

env -u http_proxy -u https_proxy curl https://example.com

shebang で複数引数を渡す(-S の利用)

説明: OS が shebang の1引数制限を持つため、-S で分割します。
コマンド(スクリプト先頭行):

#!/usr/bin/env -S python3 -O

この例では python3-O を併せて渡せます。

実行時にディレクトリを切り替える

説明: /var/www に移動してからビルド。
コマンド:

env -C /var/www make build

エラー例:-i で PATH を消してコマンド未検出

説明: 何も設定しないとコマンドが見つかりません。
コマンド:

env -i ls

出力例(例):

env: ‘ls’: No such file or directory

対処: PATH を明示してから実行します(例: env -i PATH=/usr/bin:/bin ls)。

関連コマンド

  • printenv : 環境変数の表示専用(NUL 区切り -0 など)。
  • シェル組み込み export / set : 環境(とシェル変数)の定義・参照。
  • envsubst : 文字列/テンプレート内の環境変数置換(gettext)。
  • direnv : ディレクトリ単位で環境を自動切替える補助ツール。
  • sudo -E / sudo env "VAR=..." : 権限昇格時の環境引き継ぎ/設定。

備考

  • アプリ探索と -P: -PCOMMAND の探索時だけ指定の PATH を使用し、環境の PATH 自体は書き換えません。
  • -S(split-string): shebang で複数引数を扱うための GNU 拡張。古い env や一部 OS には無い場合があります。
  • プラットフォーム差: BSD/BusyBox 版は -C/-P/-S/-0/-v などが無い/挙動が異なることがあります。移植性が必要なら env --help で確認。
  • セキュリティ: 外部入力を環境に渡す際は PATH やロケール(LC_*, LANG)、ローダ関連(LD_*)などに注意してください。env -i で最小限から積み上げるのが安全です。
  • 一覧表示: 単に環境を表示したいだけなら printenv の方がオプションが明快です。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント