Ошибка запуска скрипта:?#!/ 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. Я не знаю, где проблема.
2 ответа
Скорее всего, у вас есть один или несколько непечатаемых символов в начале скрипта, которые невидимы, когда вы смотрите на скрипт в редакторе (или через 'cat'), но не позволяете вызвать правильный интерпретатор csh. Остальные ошибки, вероятно, связаны только с тем, что система возвращается к оболочке по умолчанию (bash), в которой синтаксис похож на
if ($1 != "") cd $1
неверно и исчезнет, как только вы исправите линию Шебанга, чтобы вызвать намеченную оболочку.
Я не уверен, что лучший способ удалить непечатные символы - вы можете попробовать что-то вроде
sed -i '1 s/^[^#]*//' most_plasim_run
который удалит все до первого символа # в строке 1 скрипта - или вы можете открыть новый пустой файл и вставить "чистую" строку Шебанга
#!/bin/csh
а затем скопируйте и вставьте оставшуюся часть сценария и повторно сохраните его.
Вы получаете эти ошибки, потому что у вас нет csh интерпретатор оболочки установлен. csh оболочка с C-подобным синтаксисом Чтобы установить его, выполните следующую команду в терминале:
sudo apt-get purge csh
В остальном скрипт выглядит нормально.