运行脚本时出错:?#!/bin/csh:没有此文件或目录

运行脚本时出错:?#!/bin/csh:没有此文件或目录

我正在尝试运行以下脚本,它将使用气候模拟程序启动模拟运行:

#!/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

然后复制并粘贴脚本的其余部分并重新保存。

答案2

您收到这些错误是因为您没有csh安装 shell 解释器。csh是一个具有类似 C 语法的 shell。要安装它,请运行以下命令终端

sudo apt-get install csh

休息时,脚本看起来还不错。

相关内容