【发布时间】:2026-01-18 14:50:01
【问题描述】:
csh:
set a=0
echo "a is $a"
当我这样做时 ./my_script.csh 输出是:
a is
当我做 source my_script.csh 输出时:
a is 0
为什么会这样。据我所知,./ 执行使用新的 shell。
【问题讨论】:
csh:
set a=0
echo "a is $a"
当我这样做时 ./my_script.csh 输出是:
a is
当我做 source my_script.csh 输出时:
a is 0
为什么会这样。据我所知,./ 执行使用新的 shell。
【问题讨论】:
没错,./my_script.csh 启动一个新的 shell,并使用 #!您应该在文件顶部选择要运行的 shell(在这种情况下,应该是 csh)。
source my_script.csh 在当前 shell 中运行脚本。
如果脚本在例如 bash shell 中运行不正确,那么 set a=0 不是在 bash 中设置环境变量的语法,因此代码将无法按预期工作,因为您正在使用错误的外壳。
看看#!在文件的顶部。对吗?
【讨论】:
检查变量“a”是否已在当前 shell 中设置:
set | grep '^a='
请记住,一旦将脚本源代码到当前的 shell, 它的所有全局变量都在那里,直到未设置或退出当前 shell。 您可能需要启动一个新的 shell,获取脚本,结束退出 shell 以执行有效的测试。
我不知道您的问题的背景,但您可能希望导出一些关键变量以便在每个子流程中都有它们的副本。
【讨论】: