我创建了以下test1.csh和test2.csh来调试link_grib.csh中的错误,这是一个来自名为WRF的气候模拟软件包的.csh脚本。
我在此Linux服务器上没有超级用户访问权限。提供的脚本对于同一服务器上的超级用户运行良好,因此不需要进行任何修改。
我从link_grib.csh中打破了两个简单的片段,一个涉及foreach,另一个涉及符号链接并说明了我看到的输出,请参阅下面的问题。
1) Test1.csh
#!/bin/csh
echo ${1}
foreach f ( ${1}* )
end
输出:
[frank@simunec1 20130604_mini]$ ls ./FNL.dat
./FNL.dat
[frank@simunec1 20130604_mini]$ test1.csh ./FNL.dat
./FNL.dat
foreach: No match.
问题:为什么foreach会在这里没有回复?
2) Test2.csh
#!/bin/csh
ln -sf ./FNL.dat GRIBFILE.AAA
输出:
[frank@simunec1 20130604_mini]$ test2.csh
[frank@simunec1 20130604_mini]$ ls GRIBFILE.AAA
ls: cannot access GRIBFILE.AAA: No such file or directory
// but running the same command outside of .csh script, everything is fine
[frank@simunec1 20130604_mini]$ ln -sf ./FNL.dat GRIBFILE.AAA
[frank@simunec1 20130604_mini]$ ls GRIBFILE.AAA
GRIBFILE.AAA
问题:为什么在.csh脚本之外运行相同的命令。
答案 0 :(得分:2)
粗略猜测,你有一个.cshrc
文件正在更改目录。
我尝试在shebang行(-f
)中放置一个#!/bin/csh -f
,或者使用csh -f <file>
调用csh脚本。
您可以使用-X
选项显示在启动脚本(.cshrc文件)中执行的命令,这些命令可以指向正确的方向。