我正在尝试运行以下脚本,它将使用气候模拟程序启动模拟运行:
#!/bin/csh
# run-script generated by Most Tue Jul 23 13:10:46 2013
set EXP=MOST # Name your experiment here
unset noclobber
if ($1 != "") cd $1
# rm -f plasim_restart
cp MOST_REST.010 plasim_restart
rm -f Abort_Message
set YEAR = 10
set YEARS = 50
while ($YEAR < $YEARS)
set YEAR = `expr $YEAR + 1`
set DATANAME=`printf '%s.%03d' $EXP $YEAR`
set DIAGNAME=`printf '%s_DIAG.%03d' $EXP $YEAR`
set RESTNAME=`printf '%s_REST.%03d' $EXP $YEAR`
./most_plasim_t42_l10_p1.x >${DIAGNAME}
if (-e Abort_Message) exit 1
if (-e puma_output) mv puma_output $DATANAME
if (-e puma_diag ) mv puma_diag $DIAGNAME
cp plasim_status plasim_restart
mv plasim_status $RESTNAME
end
当我尝试运行它时,收到以下错误消息:
./most_plasim_run: line 1: ?#!/bin/csh: No such file or directory
./most_plasim_run: line 5: syntax error near unexpected token `cd'
./most_plasim_run: line 5: `if ($1 != "") cd $1'
我对这个错误信息感到困惑,因为我确实有 bin/csh。我不知道问题出在哪里。
答案1
您很可能在脚本开头有一个或多个非打印字符,当您在编辑器中(或通过“cat”)查看脚本时,这些字符是不可见的,但会阻止调用正确的 csh 解释器。其余错误可能只是因为系统正在回退到默认 (bash) shell,其中语法如下
if ($1 != "") cd $1
是不正确的,并且一旦你修复shebang行以便调用预期的shell它就会消失。
我不确定删除非打印字符的最佳方法 - 你可以尝试类似
sed -i '1 s/^[^#]*//' most_plasim_run
它将删除脚本第 1 行第一个 # 字符之前的所有内容 - 或者你可以打开一个新的空文件并插入一个“干净”的 shebang 行
#!/bin/csh
然后复制并粘贴脚本的其余部分并重新保存。