如何在同一脚本中调用BASH和CSH Shell

时间:2019-05-02 22:15:45

标签: bash shell invoke csh

在同一脚本中,我想使用一些CSH命令和一些BASH命令。 尽管我遵循各个shell的不同语法,但一个接一个地调用却给我带来了问题。我想知道代码中的错误 感谢您的建议!

我是Shell的初学者,尤其是CSH。但是我得到的代码完全是用CSH编写的。由于我对CSH有所了解,因此我想通过包含BASH命令来调整现有的CSH代码,我对此很满意。当我在CSH之后通过调用!#/ bin / bash尝试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:未定义的变量。”

2 个答案:

答案 0 :(得分:1)

您在这里要求“将一种语言嵌入另一种语言”,正如@Bayou所解释的那样,不直接支持该语言。也许您被HTML世界所宠爱了,您可以在它们之间挤压CSS和Javascript,也可以使用一些服务器端PHP或Ruby之类的东西。

最接近此的是此处的文档。如果您在bash脚本中编写a

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

这些命令在csh驱动的子进程中执行。它以相同的方式与bash相反。确保终止符(在我的示例中为CSH_END)从第1列开始。

这是否对您的应用程序有效,我不能说,因为在原始脚本中以相同进程运行的事物现在在不同进程中运行。

答案 1 :(得分:0)

您不能像您建议的那样混淆它们。这就像问“我可以在Python脚本中使用PHP代码”一样。但是,大多数外壳程序都具有运行命令(-c)的选项,就像csh does一样。在sh脚本中使用Bash:

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