Как я могу вызвать оболочки BASH и CSH в одном скрипте - PullRequest
0 голосов
/ 03 мая 2019

В том же сценарии я хочу использовать некоторые команды CSH и некоторые команды BASH.Вызов один за другим вызывает проблемы, несмотря на то, что я придерживаюсь другого синтаксиса для соответствующих оболочек.Я хочу знать, где в моем коде ошибка. Ваши предложения приветствуются !!

Я новичок в оболочке, особенно для CSH.но код, который я получил, был полностью написан на CSH.Поскольку я немного знаком с CSH, я хотел настроить существующий код CSH, добавив в него команды BASH, которые мне удобно использовать.Когда я пробовал команды BASH после CSH, вызывая! # / Bin / bash, он выдавал некоторые ошибки.Я хочу знать, пропускаю ли я какие-либо параметры !!

#!/bin/csh
----
----
----
#!/bin/bash
dir2in="/nethome/achandra/NCEI/CCSM4_Historical/Forecasts"
filin2 ="ccsm4_0_cfsrr_Fcst.${ENS}.cam2.h1.${yyear[${iimonth}]}-${mmon[${iimonth}]}-${ssday}-00000.nc"
cp $dirin/$filin /nethome/achandra/NCEI/CCSM4_Historical_Forecasts/
ln -s /nethome/achandra/NCEI/CCSM4_Historical/Forecasts/$filin /nethome/achandra/NCEI/CCSM4_Historical_Forecasts/"${$filin%.nc.cdo}.nc"
#!/bin/csh 

Я получаю ошибки, такие как "dirin: Undefined variable."

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вы просите здесь «встроить один язык в другой», что, как уже объяснял @Bayou, напрямую не поддерживается. Возможно, вы были избалованы миром HTML, где вы можете сжать CSS и Javascript между ними и, возможно, использовать некоторые серверные PHP или Ruby вещи.

Наиболее близкими к этому являются ЗДЕСЬ-документы. Если вы пишете внутри своего скрипта bash, то

csh <<CSH_END
your ...
csh ....
commands ...
go here ...
CSH_END

эти команды выполняются в дочернем процессе, управляемом csh. Он работает наоборот с Bash таким же образом. Убедитесь, что символ терминатора (CSH_END в моем примере) начинается в столбце 1.

Будет ли это работать для вашего приложения, я не могу сказать, потому что вещи, которые выполняются в одном и том же процессе в вашем исходном скрипте, теперь работают в разных процессах.

0 голосов
/ 03 мая 2019

Вы не можете смешивать их, как вы предлагаете.Это все равно что спросить «могу ли я использовать PHP-код в скрипте Python».Однако большинство оболочек имеют опции для запуска команд (-c), так же как csh делает .Для использования Bash в скрипте sh:

#! /bin/sh

CONDITION=$(/bin/bash -c "[[ 1 > 2 ]] || echo no")
echo $CONDITION
exit 0

В противном случае вы можете создать отдельные файлы и выполнить их.

#! /bin/sh

CONDITION=$(./bash-script.sh)
echo $CONDITION
exit 0

Вы, конечно, должны использовать csh вместо sh.Оба моих сценария выведут следующий текст.

$ ./test.sh 
no
...