如何检测tcsh Shell是否通过-c参数启动?
检测tcsh是否通过
-c参数启动 tcsh与其他Shell类似,支持通过-c参数启动时直接执行指定命令集,示例如下:
tcsh -c 'mkdir /tmp/some-dir; tar -C /tmp/some-dir -xvf a-tarball.tar'
但使用tcsh -c启动时,默认仍会加载.cshrc等配置文件。如果需要在.cshrc中区分这种场景,跳过部分命令,可以通过以下两种方式实现:
方法1:通过$prompt变量判断(推荐)
tcsh的交互式shell会自动设置$prompt变量,而通过-c启动的非交互式shell不会默认设置该变量。可以在.cshrc中加入判断:
if ($?prompt) then # 仅在交互式tcsh中执行的命令 echo "这是交互式tcsh" else # 非交互式(含-c启动)时执行的逻辑,或直接跳过部分命令 # echo "这是通过-c或非交互式方式启动的tcsh" endif
方法2:通过进程命令行检测
如果需要精准判断是否使用了-c参数,可以通过ps命令查看当前shell进程的启动参数:
set shell_cmd = `ps -p $$ -o args=` if ("$shell_cmd" =~ *"-c"*) then # 确认是通过-c参数启动的tcsh # 在这里加入需要跳过或执行的命令逻辑 endif
这种方式依赖ps命令,不同系统的ps参数可能略有差异,比如部分系统可能需要用ps -o cmd= -p $$替代。
内容的提问来源于stack exchange,提问作者Wirawan Purwanto
相关产品推荐
相关产品推荐

