setenvコマンドで環境変数を設定する方法|csh・tcshの書き方とbash exportとの違いコマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, システム管理コマンド > setenvコマンドで環境変数を設定する方法|csh・tcshの書き方とbash exportとの違いコマンド
「setenvで環境変数を設定したはずなのに、ログインし直すと消えている」
「bashでは export を使うのに、csh では setenv? 違いがよく分からない」
Linuxサーバーの運用では、シェルの種類によって環境変数の設定方法が異なるため、混乱するエンジニアが少なくありません。

この記事では、csh/tcsh環境で環境変数を設定する setenv コマンドの使い方を解説します。基本的な書き方から、bashの export との違い、設定を永続化する方法、トラブル対処まで、実務で必要な知識をまとめました。

【この記事でわかること】
・csh/tcshでの環境変数設定はsetenv、削除はunsetenvを使う(bashのexport/unsetとは異なる)
・設定の永続化は~/.cshrcまたは~/.tcshrcに記述する
・現代のLinuxではbash/zshが主流。csh/tcshを使う場合の変換方法も解説

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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
最大の注意点は区切り文字の違いです。bashでは 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

※tcsh を使っている場合は ~/.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環境で setenv を実行しようとした場合に発生します。setenv は csh/tcsh 専用のコマンドであり、bash では使えません。

bash環境では、代わりに export コマンドを使用してください。

# bash環境での正しい書き方 $ export LANG=ja_JP.UTF-8

本記事のまとめ

やりたいこと コマンド(csh/tcsh)
環境変数を設定する setenv 変数名 値
環境変数を削除する unsetenv 変数名
環境変数の一覧を表示する setenv(引数なし)
PATHにディレクトリを追加する setenv PATH /新しいパス:${PATH}
設定を永続化する ~/.cshrcsetenv を記述
設定ファイルを即座に反映する source ~/.cshrc
現在のシェルを確認する echo $SHELL

cshとbashの環境変数の違いを正しく理解して、複数シェル環境でも迷わないようにしたいですか?

シェルの種類による違いを体系的に学ぶと、移植性の高いスクリプトが書けるようになります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。