Linux の変数エクスポート

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

環境変数は Linux オペレーティングシステムにおいて重要な役割を果たします。これらは、システム上で実行されるプロセスに影響を与える動的な値です。この実験では、Linux で export コマンドを使用して環境変数を作成および管理する方法を探ります。

環境変数は、設定情報の保存、プロセス間の通信、システム全体の設定の定義など、多くのシナリオで使用されます。環境変数の操作方法を理解することは、Linux ユーザーやシステム管理者にとって不可欠なスキルです。

この実験では、変数の設定の基本、子プロセスで使用できるように変数をエクスポートする方法、および bash スクリプトでの使用方法を案内します。これらの変数を使用して、より動的で設定可能なアプリケーションを作成する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") linux/UserandGroupManagementGroup -.-> linux/unset("Variable Unsetting") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271279{{"Linux の変数エクスポート"}} linux/chmod -.-> lab-271279{{"Linux の変数エクスポート"}} linux/cd -.-> lab-271279{{"Linux の変数エクスポート"}} linux/env -.-> lab-271279{{"Linux の変数エクスポート"}} linux/export -.-> lab-271279{{"Linux の変数エクスポート"}} linux/unset -.-> lab-271279{{"Linux の変数エクスポート"}} linux/nano -.-> lab-271279{{"Linux の変数エクスポート"}} end

Linux での基本的な変数の理解

このステップでは、Linux シェル環境における変数の作成と使用の基本を学びます。

Linux では、変数はコマンドやスクリプトによって参照および操作できるデータを格納するために使用されます。変数は、単に値を表す名前です。

シェルで簡単な変数を作成してみましょう。

name="LinuxLearner"

このコマンドは、name という名前の変数を作成し、それに "LinuxLearner" という値を割り当てます。変数に値を割り当てるとき、等号の前後にスペースを入れないように注意してください。

変数の値を表示するには、変数名の前にドル記号 ($) を付けて echo コマンドを使用します。

echo $name

以下の出力が表示されるはずです。

LinuxLearner

文字列の中でも変数を使用することができます。

echo "Hello, $name!"

出力:

Hello, LinuxLearner!

次に、好きな色を格納する別の変数を作成しましょう。

color="blue"

そして、両方の変数を使用してメッセージを表示します。

echo "Hello $name, I see your favorite color is $color."

出力:

Hello LinuxLearner, I see your favorite color is blue.

ここで作成したこれらの変数は、「シェル変数」または「ローカル変数」と呼ばれます。これらは現在のシェルセッションでのみ使用できます。次のステップでは、export コマンドを使用して他のプロセスでも変数を使用できるようにする方法を学びます。

変数を環境変数としてエクスポートする

前のステップでは、現在のシェルセッションでのみ使用可能なシェル変数を作成しました。このステップでは、export コマンドを使用してシェル変数を子プロセスでも使用可能な環境変数に変換する方法を学びます。

まず、これらの違いを理解しましょう。

  • シェル変数: 現在のシェルでのみ使用可能
  • 環境変数: 現在のシェルとそのすべての子プロセスで使用可能

これを実証するために、新しいシェル変数を作成しましょう。

greeting="Welcome to Linux"

次に、この変数にアクセスしようとする新しいシェルスクリプトを作成します。テキストエディタを開き、~/project ディレクトリに test_var.sh という名前のファイルを作成します。

cd ~/project
nano test_var.sh

ファイルに以下の内容を追加します。

#!/bin/bash
echo "The greeting is: $greeting"

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

スクリプトを実行可能にします。

chmod +x ~/project/test_var.sh

次に、スクリプトを実行します。

~/project/test_var.sh

以下の出力が表示されます。

The greeting is:

シェル変数は子プロセスに渡されないため、変数の値が表示されないことに注意してください。

この変数をスクリプトで使用できるようにするには、エクスポートする必要があります。

export greeting="Welcome to Linux"

再度スクリプトを実行します。

~/project/test_var.sh

今度は、以下のように表示されるはずです。

The greeting is: Welcome to Linux

おめでとうございます!変数を正常にエクスポートし、他のプロセスからアクセスできる環境変数にしました。

env コマンドを使用して、現在のすべての環境変数を確認することができます。

env

これにより、現在のセッションでのすべての環境変数のリストが表示されます。

また、echo コマンドを使用して特定の環境変数を確認することもできます。

echo $greeting

次に、別の環境変数を作成してエクスポートしましょう。

export USER_LEVEL="beginner"

以下のコマンドを実行して、設定されていることを確認します。

echo $USER_LEVEL

出力:

beginner

環境変数を使用するスクリプトの作成

このステップでは、環境変数を利用して設定を行うスクリプトの作成と実行方法を学びます。これは、コードを変更せずにアプリケーションをより柔軟かつ設定可能にするためのソフトウェア開発における一般的な手法です。

まず、環境変数を使用して出力をカスタマイズするスクリプトを作成しましょう。~/project ディレクトリに greet.sh という名前の新しいファイルを作成します。

cd ~/project
nano greet.sh

ファイルに以下の内容を追加します。

#!/bin/bash
## This script demonstrates using environment variables

## Default values if environment variables are not set
DEFAULT_NAME="Guest"
DEFAULT_LANGUAGE="English"

## Use environment variables or default values
USER_NAME=${USER_NAME:-$DEFAULT_NAME}
LANGUAGE=${LANGUAGE:-$DEFAULT_LANGUAGE}

## Greet based on language
if [ "$LANGUAGE" = "English" ]; then
  echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
elif [ "$LANGUAGE" = "Spanish" ]; then
  echo "Hola, $USER_NAME! Bienvenido al entorno de aprendizaje de Linux."
elif [ "$LANGUAGE" = "French" ]; then
  echo "Bonjour, $USER_NAME! Bienvenue dans l'environnement d'apprentissage Linux."
else
  echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
fi

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

スクリプトを実行可能にします。

chmod +x ~/project/greet.sh

次に、環境変数を設定せずにスクリプトを実行します。

~/project/greet.sh

出力:

Hello, Guest! Welcome to the Linux learning environment.

環境変数が設定されていなかったため、スクリプトはデフォルト値を使用しました。いくつかの環境変数を設定して、再度スクリプトを実行しましょう。

export USER_NAME="LinuxExplorer"
export LANGUAGE="Spanish"

再度スクリプトを実行します。

~/project/greet.sh

出力:

Hola, LinuxExplorer! Bienvenido al entorno de aprendizaje de Linux.

設定した環境変数に基づいてスクリプトの出力が変化したことに注目してください。これは、コードを変更せずに環境変数を使用してアプリケーションの動作を設定できることを示しています。

別の言語で試してみましょう。

export LANGUAGE="French"
~/project/greet.sh

出力:

Bonjour, LinuxExplorer! Bienvenue dans l'environnement d'apprentissage Linux.

このアプローチは、アプリケーションをより柔軟にし、さまざまな環境に適応させるためのソフトウェア設定で広く使用されています。

高度な使用方法と一時的な環境変数

このステップでは、グローバル環境を変更せずに単一のコマンドに対して環境変数を設定する方法と、より高度な環境変数の使用方法を学びます。

単一のコマンドに対する環境変数の設定

時には、単一のコマンドに対してのみ環境変数を設定したい場合があります。これは、コマンドの前に環境変数の割り当てを付けることで実現できます。

LANGUAGE="Spanish" ~/project/greet.sh

スクリプトがスペイン語設定で実行されることに注意してくださいが、グローバルな環境変数は変更されていません。

echo $LANGUAGE

出力:

French

これは、環境変数がコマンドの実行期間中のみ設定されたためです。

実際のシナリオでの環境変数

もっと実用的な例を作ってみましょう。架空のアプリケーションの設定スクリプトを作成します。app_config.sh という名前の新しいファイルを作成します。

cd ~/project
nano app_config.sh

以下の内容を追加します。

#!/bin/bash
## Application configuration script

## Display the current configuration
echo "Current Application Configuration:"
echo "--------------------------------"
echo "App Name: ${APP_NAME:-Unknown}"
echo "App Version: ${APP_VERSION:-0.0.0}"
echo "Log Level: ${LOG_LEVEL:-INFO}"
echo "Database URL: ${DB_URL:-localhost:5432}"
echo "API Key: ${API_KEY:-not set}"
echo "--------------------------------"

## Check if required configurations are set
if [[ -z "$APP_NAME" ]]; then
  echo "WARNING: APP_NAME is not set. Some features may not work properly."
fi

if [[ -z "$API_KEY" ]]; then
  echo "WARNING: API_KEY is not set. API functionality will be limited."
fi

## Validate log level
valid_log_levels=("DEBUG" "INFO" "WARNING" "ERROR" "CRITICAL")
log_level=${LOG_LEVEL:-INFO}
valid=false

for level in "${valid_log_levels[@]}"; do
  if [[ "$level" == "$log_level" ]]; then
    valid=true
    break
  fi
done

if [[ "$valid" == false ]]; then
  echo "ERROR: Invalid LOG_LEVEL '$log_level'. Must be one of: ${valid_log_levels[*]}"
  exit 1
fi

echo "Configuration validation complete."

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

スクリプトを実行可能にします。

chmod +x ~/project/app_config.sh

次に、環境変数を設定せずにスクリプトを実行します。

~/project/app_config.sh

設定が不足していることに関する警告が表示されるはずです。

次に、必要なすべての環境変数を設定して、再度スクリプトを実行します。

export APP_NAME="MyAwesomeApp"
export APP_VERSION="1.0.0"
export LOG_LEVEL="DEBUG"
export DB_URL="postgres://user:password@dbserver:5432/mydb"
export API_KEY="abc123xyz456"

~/project/app_config.sh

すべての設定値が適切に表示され、警告が表示されないはずです。

無効なログレベルを設定してみましょう。

export LOG_LEVEL="VERBOSE"
~/project/app_config.sh

スクリプトは、無効なログレベルに関するエラーメッセージを表示するはずです。

この例は、環境変数をアプリケーションの設定に使用し、検証とデフォルト値を持たせる方法を示しています。

環境変数の永続化

これまで、現在のターミナルセッション中のみ有効な環境変数を設定してきました。ターミナルを閉じたりログアウトしたりすると、これらの変数は失われます。このステップでは、セッションをまたいで環境変数を永続化する方法を学びます。

設定ファイルに環境変数を保存する

環境変数を永続化するために設定できるファイルはいくつかあります。

  1. ~/.bashrc または ~/.zshrc:ユーザー固有の変数用
  2. /etc/environment:システム全体の変数用
  3. /etc/profile または /etc/profile.d/ 内のファイル:ログイン時に読み込まれるシステム全体の変数用

ユーザーのシェル設定ファイルにいくつかの環境変数を追加しましょう。この実験環境では ZSH を使用しているので、~/.zshrc ファイルを編集します。

nano ~/.zshrc

ファイルの末尾までスクロールし、以下の行を追加します。

## Custom environment variables
export EDITOR="nano"
export CUSTOM_PATH="$HOME/bin"
export GREETING="Hello from .zshrc!"

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

これらの変更を現在のセッションに適用するには、ファイルをソースする必要があります。

source ~/.zshrc

次に、変数が設定されているか確認します。

echo $EDITOR
echo $CUSTOM_PATH
echo $GREETING

.zshrc ファイルで設定した値が表示されるはずです。

これらの環境変数は、新しいシェルセッションを開始するたびに利用可能になります。

カスタム環境変数ファイルの作成

環境変数を管理する良い方法は、特にプロジェクト固有の変数については、それ専用の別のファイルを作成することです。これにより、設定の管理と共有が容易になります。

プロジェクトディレクトリに .env という名前のファイルを作成しましょう。

cd ~/project
nano .env

以下の内容を追加します。

## Project environment variables
export PROJECT_NAME="Linux Environment Lab"
export PROJECT_VERSION="1.0.0"
export DEBUG_MODE="true"

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

これらの変数を現在のセッションに読み込むには、ファイルをソースします。

source ~/project/.env

次に、変数が設定されているか確認します。

echo $PROJECT_NAME
echo $PROJECT_VERSION
echo $DEBUG_MODE

.env ファイルの値が表示されるはずです。

環境変数を読み込むスクリプトの作成

最後に、ファイルから環境変数を読み込むスクリプトを作成しましょう。これは開発環境で一般的なパターンです。

cd ~/project
nano load_env.sh

以下の内容を追加します。

#!/bin/bash
## Script to load environment variables from a .env file

ENV_FILE=".env"

if [[ -f "$ENV_FILE" ]]; then
  echo "Loading environment variables from $ENV_FILE"

  ## Read each line from the .env file
  while IFS= read -r line || [[ -n "$line" ]]; do
    ## Skip comments and empty lines
    if [[ $line =~ ^## ]] || [[ -z $line ]]; then
      continue
    fi

    ## Export the variable if it starts with "export "
    if [[ $line == export* ]]; then
      ## Remove the "export " prefix and export the variable
      eval "${line}"
      echo "Exported: ${line#export }"
    fi
  done < "$ENV_FILE"

  echo "Environment variables loaded successfully"
else
  echo "Error: $ENV_FILE file not found"
  exit 1
fi

ファイルを保存し (Ctrl+O を押し、Enter を押す)、nano を終了します (Ctrl+X を押す)。

スクリプトを実行可能にします。

chmod +x ~/project/load_env.sh

次に、前に設定した変数を解除してから、スクリプトを実行して再度読み込みます。

unset PROJECT_NAME PROJECT_VERSION DEBUG_MODE
echo "PROJECT_NAME: $PROJECT_NAME"

## Now load the variables using the script
~/project/load_env.sh

## Check if the variables are now set
echo "PROJECT_NAME: $PROJECT_NAME"

このスクリプトは .env ファイルを読み取り、export キーワードで定義された各変数をエクスポートします。

このアプローチは、プロジェクト固有の環境変数を管理するために開発環境で一般的に使用されています。

まとめ

この実験では、Linux での環境変数の操作に関する重要な概念を学びました。

  1. 基本的な変数:現在のセッションでシェル変数を作成し、使用する方法を学びました。
  2. 環境変数export コマンドを使用して、シェル変数を子プロセスからアクセス可能な環境変数に変換する方法を学びました。
  3. スクリプトでの変数の使用:コードを変更せずに環境変数を読み取り、その動作をカスタマイズするスクリプトを作成しました。
  4. 高度な使用方法:単一のコマンドに対して変数を設定したり、スクリプト内で変数の値を検証するなどの高度なテクニックを探索しました。
  5. 永続的な変数:設定ファイルに環境変数を追加し、それらを読み込むユーティリティスクリプトを作成することで、環境変数を永続化する方法を学びました。

環境変数は、アプリケーションの設定、プロセス間でのデータ共有、環境のカスタマイズを可能にする Linux の強力な機能です。ソフトウェア開発、システム管理、アプリケーションのデプロイで広く使用されています。

環境変数を習得することで、個人プロジェクトからエンタープライズレベルのシステム管理まで、Linux の旅で役立つ重要なスキルを身につけました。