export命令设置环境变量。
setenv 是C shell(csh)和其增强版tcsh中用于设置环境变量的内置命令。环境变量是系统运行环境中定义的变量,可以被shell及其子进程访问。与Bourne shell家族的export命令功能类似,但语法不同。
setenv [变量名] [值]
注意:setenv是csh/tcsh的内置命令,不是独立的可执行文件。
在C shell/tcsh中设置环境变量:
setenv EDITOR vim
设置EDITOR环境变量为vim,所有使用此变量的程序将使用vim作为默认编辑器。
setenv PATH /usr/local/bin:/usr/bin:/bin
设置PATH环境变量,多个路径用冒号分隔。
在csh/tcsh中查看环境变量:
echo $PATH
或使用printenv命令:
printenv PATH
使用unsetenv删除环境变量:
unsetenv EDITOR
删除EDITOR环境变量。
setenv LINES 25
setenv COLUMNS 80
设置终端行数和列数环境变量。
| 特性 | setenv (csh/tcsh) | export (bash/sh) |
|---|---|---|
| shell家族 | C shell家族 (csh, tcsh) | Bourne shell家族 (bash, sh, ksh, zsh) |
| 语法 | setenv VAR value |
export VAR=value 或 VAR=value; export VAR |
| 变量引用 | $VAR |
$VAR |
| 删除变量 | unsetenv VAR |
unset VAR |
| 局部变量 | set var = value (无env) |
var=value (无export) |
| 配置文件 | ~/.cshrc, ~/.tcshrc |
~/.bashrc, ~/.bash_profile |
| 环境变量 | 描述 | 示例值 |
|---|---|---|
PATH |
可执行文件搜索路径 | /usr/bin:/bin:/usr/local/bin |
HOME |
用户主目录路径 | /home/username |
USER |
当前用户名 | username |
SHELL |
当前使用的shell | /bin/tcsh 或 /bin/csh |
TERM |
终端类型 | xterm, xterm-256color |
EDITOR |
默认文本编辑器 | vim, emacs, nano |
PAGER |
默认分页器 | less, more |
LANG |
系统语言和区域设置 | en_US.UTF-8, zh_CN.UTF-8 |
LD_LIBRARY_PATH |
动态链接库搜索路径 | /usr/local/lib:/usr/lib |
TZ |
时区设置 | Asia/Shanghai, America/New_York |
C shell中的变量类型:
setenv设置,对当前shell及其所有子进程可见set设置,仅对当前shell可见$1, $2, ... 脚本的参数$$(当前进程ID), $?(上一条命令的退出状态)等示例:
# 设置shell变量(仅在当前shell有效)
set local_var = "hello"
# 设置环境变量(对子进程也有效)
setenv ENV_VAR "world"
~/.cshrc 或 ~/.tcshrc:
# 设置PATH环境变量
setenv PATH /usr/local/bin:$PATH
# 设置编辑器
setenv EDITOR vim
# 设置语言
setenv LANG en_US.UTF-8
# 设置提示符
set prompt = "%m:%c %% "
# 设置别名
alias ll 'ls -la'
alias rm 'rm -i'
/etc/csh.cshrc 或 /etc/csh.login:
# 系统级环境变量设置
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 设置默认umask
umask 022
# 设置历史记录
set history = 1000
set savehist = 1000
# 设置邮件检查
set mail = (/var/mail/$USER)
C shell脚本示例:
#!/bin/tcsh
# myscript.csh
# 设置环境变量
setenv SCRIPT_NAME "My C Shell Script"
setenv LOG_FILE "/var/log/myscript.log"
# 使用环境变量
echo "Starting $SCRIPT_NAME"
echo "Log file: $LOG_FILE"
# 设置局部变量
set counter = 1
set max_count = 10
# 循环示例
while ($counter <= $max_count)
echo "Iteration $counter"
@ counter++ # 递增计数器
end
# 条件判断
if ($?DEBUG) then
echo "Debug mode is enabled"
else
echo "Debug mode is disabled"
endif
# 退出脚本
exit 0
source命令使更改生效printenv 或 envif ($?VARNAME) then echo "Set"; endifsetenv PATH "/usr/local/bin:$PATH"(setenv PATH /special/path; command)exec bashsource ~/.tcshrcecho $SHELL 或 ps -p $$export VAR=value → setenv VAR valuecsh或tcshsetenv MESSAGE "Hello World"source命令重新加载#!/bin/tcsh| 相关命令 | 说明 | shell类型 |
|---|---|---|
export |
在Bourne shell家族中设置环境变量 | bash, sh, ksh, zsh |
printenv |
显示环境变量 | 所有shell |
env |
显示或设置环境变量并执行命令 | 所有shell |
set |
在csh中设置shell变量,在bash中显示变量 | csh/tcsh (局部变量), bash (显示) |
unsetenv |
在csh/tcsh中删除环境变量 | csh/tcsh |
unset |
在bash中删除变量,在csh中删除shell变量 | bash (环境变量), csh (局部变量) |
source 或 . |
在当前shell中执行脚本文件 | 所有shell |
bash到csh/tcsh的环境变量设置转换:
# bash语法 # csh/tcsh语法
export PATH=$PATH:/new/path setenv PATH $PATH:/new/path
export EDITOR=vim setenv EDITOR vim
export LANG=en_US.UTF-8 setenv LANG en_US.UTF-8
# 带空格的变量
export NAME="John Doe" setenv NAME "John Doe"
# 删除变量
unset EDITOR unsetenv EDITOR
# 局部变量(不导出)
local_var="value" set local_var = value
# 在 ~/.tcshrc 中添加开发环境配置
# 设置Java开发环境
setenv JAVA_HOME /usr/lib/jvm/java-11-openjdk
setenv PATH $JAVA_HOME/bin:$PATH
# 设置Python环境
setenv PYTHONPATH /usr/local/lib/python3.9/site-packages:$PYTHONPATH
# 设置Go环境
setenv GOPATH $HOME/go
setenv PATH $GOPATH/bin:$PATH
# 设置Node.js环境
setenv NODE_PATH /usr/local/lib/node_modules
setenv PATH /usr/local/node/bin:$PATH
# 设置开发工具
setenv CC gcc
setenv CXX g++
setenv MAKE make
# 设置编辑器
setenv EDITOR vim
setenv VISUAL vim
# 设置分页器
setenv PAGER less
# 设置终端类型
setenv TERM xterm-256color
# 设置语言
setenv LANG en_US.UTF-8
# 加载配置后提示
echo "Development environment configured in tcsh"