「bashでは export を使うのに、csh では setenv? 違いがよく分からない」
Linuxサーバーの運用では、シェルの種類によって環境変数の設定方法が異なるため、混乱するエンジニアが少なくありません。
この記事では、csh/tcsh環境で環境変数を設定する
setenv コマンドの使い方を解説します。基本的な書き方から、bashの export との違い、設定を永続化する方法、トラブル対処まで、実務で必要な知識をまとめました。・csh/tcshでの環境変数設定はsetenv、削除はunsetenvを使う(bashのexport/unsetとは異なる)
・設定の永続化は~/.cshrcまたは~/.tcshrcに記述する
・現代のLinuxではbash/zshが主流。csh/tcshを使う場合の変換方法も解説
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
1. setenvコマンドとは? bashのexportとの違い
setenv は、csh(Cシェル)および tcsh で環境変数を設定するコマンドです。bash(Bourneシェル系)の export に相当します。| 項目 | csh / tcsh | bash / sh / zsh |
|---|---|---|
| 環境変数の設定 | setenv 変数名 値 |
export 変数名=値 |
| 環境変数の削除 | unsetenv 変数名 |
unset 変数名 |
| 環境変数の一覧表示 | setenv(引数なし) |
env または printenv |
| 区切り文字 | スペース(変数名と値の間) | =(イコール) |
| 設定ファイル | ~/.cshrc / ~/.tcshrc |
~/.bashrc / ~/.bash_profile |
export HOME=/home/user と「=」を使いますが、cshでは setenv HOME /home/user と「スペース」で区切ります。「=」を使うとエラーになるため気をつけてください。2. setenvの基本的な使い方
環境変数を設定する
% setenv LANG ja_JP.UTF-8 % echo $LANG ja_JP.UTF-8
setenv 変数名 値 の形式で設定します。設定した値は echo $変数名 で確認できます。PATHに新しいディレクトリを追加する
既存のPATH に新しいディレクトリを追加するには、現在の値($PATH)と新しいパスをコロン(:)で連結します。% setenv PATH /usr/local/bin:${PATH} % echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
環境変数を削除する(unsetenv)
不要になった環境変数はunsetenv で削除できます。% unsetenv LANG % echo $LANG LANG: Undefined variable.
現在の環境変数をすべて表示する
setenv を引数なしで実行すると、現在設定されている環境変数の一覧が表示されます。% setenv HOSTNAME=server01 TERM=xterm-256color SHELL=/bin/tcsh PATH=/usr/local/bin:/usr/bin:/bin HOME=/home/pakira LANG=ja_JP.UTF-8 (以下省略)
3. 【現場の鉄則】setenvの設定を永続化する
setenv コマンドで設定した環境変数は、現在のシェルセッション限りの一時的なものです。ログアウトすると消えてしまいます。設定を永続化するには、シェルの設定ファイルに記述する必要があります。
csh/tcshの設定ファイルに追記する
# vi ~/.cshrc # ファイルの末尾に以下を追記する setenv LANG ja_JP.UTF-8 setenv PATH /usr/local/bin:${PATH} setenv JAVA_HOME /usr/lib/jvm/java-11
source コマンドを実行します。% source ~/.cshrc
~/.tcshrc が優先されます。~/.tcshrc が存在しなければ ~/.cshrc が読み込まれます。setenv と set の違い(csh内部変数)
csh/tcsh にはsetenv のほかに set コマンドもあります。この2つは役割が異なります。・setenv :環境変数を設定する。子プロセスにも引き継がれる
・set :シェル変数(ローカル変数)を設定する。現在のシェルだけで有効
# 環境変数(子プロセスにも引き継がれる) % setenv EDITOR vi # シェル変数(現在のシェルだけ有効) % set history = 1000
setenv を、csh自体の動作設定(ヒストリ数やプロンプト表示など)には set を使うのが正しい使い分けです。4. 自分が使っているシェルを確認する方法
「自分の環境が bash なのか csh なのか分からない」という場合は、以下のコマンドで確認できます。# 現在のシェルを確認する $ echo $SHELL /bin/tcsh # または $ echo $0 tcsh
/bin/csh や /bin/tcsh であれば setenv を使い、/bin/bash であれば export を使ってください。「setenv: command not found」エラーが出る場合
$ setenv LANG ja_JP.UTF-8 -bash: setenv: command not found
bash環境では、代わりに
export コマンドを使用してください。# bash環境での正しい書き方 $ export LANG=ja_JP.UTF-8
本記事のまとめ
| やりたいこと | コマンド(csh/tcsh) |
|---|---|
| 環境変数を設定する | setenv 変数名 値 |
| 環境変数を削除する | unsetenv 変数名 |
| 環境変数の一覧を表示する | setenv(引数なし) |
| PATHにディレクトリを追加する | setenv PATH /新しいパス:${PATH} |
| 設定を永続化する | ~/.cshrc に setenv を記述 |
| 設定ファイルを即座に反映する | source ~/.cshrc |
| 現在のシェルを確認する | echo $SHELL |
cshとbashの環境変数の違いを正しく理解して、複数シェル環境でも迷わないようにしたいですか?
シェルの種類による違いを体系的に学ぶと、移植性の高いスクリプトが書けるようになります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
