C-shell中source含后台重定向命令的脚本失效问题排查
问题原因分析
在C-shell里,source是让脚本在当前shell进程里直接运行,而非启动独立子shell执行,这导致脚本内的命令解析逻辑和直接在命令行敲命令存在差异:
- 后台执行失效:直接命令行的
&会让rm作为当前shell的子进程后台运行,但source脚本时,shell正处理整个脚本的执行流程,&无法单独触发rm的后台执行。 - 重定向失效:C-shell的
>&重定向依赖命令的独立执行上下文,source时脚本与当前shell绑定,重定向符号未被正确关联到rm命令上,导致rm的输出仍会打印到终端。
可行解决方法
方法1:用子shell包裹命令
把rm命令用括号包裹,强制在独立子shell中执行,解析逻辑和直接命令行完全一致,后台与重定向均可正常工作:
(rm -rf del_this_dir >& /dev/null &)
方法2:用nohup实现稳定后台
nohup能让命令脱离当前shell的控制,即使source完脚本退出,命令也能持续后台运行,同时重定向会正确生效:
nohup rm -rf del_this_dir >& /dev/null &
方法3:直接执行脚本(放弃source)
给脚本添加执行权限后直接运行,此时脚本会在独立子shell中执行,命令行为与直接在命令行输入完全一致,原命令无需修改:
chmod +x your_script.csh ./your_script.csh
内容的提问来源于stack exchange,提问作者daveg
相关产品推荐
相关产品推荐

