我如何在同一脚本中调用bash和csh壳



在同一脚本中,我想使用一些csh命令和一些bash命令。尽管我正在遵循不同的语法,但又一个接一个地援引我的问题。我想知道我的代码中的错误您的建议非常感谢!

我是壳的初学者,尤其是对于CSH。但是我得到的代码完全用CSH编写。由于我熟悉CSH,因此我想通过包括bash命令来调整现有的CSH代码,我很愿意使用它。当我通过调用CSH之后尝试BASH命令!#/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 

我遇到的错误"迪林:未定义的变量。"

您在这里要求"将一种语言嵌入另一种语言",正如@Bayou已经解释的那样,该语言不受直接支持。也许您被HTML世界宠坏了,您可以在其中挤在CSS和JavaScript之间,也可以使用一些服务器端PHP或Ruby的东西。

最接近此的是此处的信息。如果您在bash脚本中写入

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

这些命令是在CSH驱动的儿童过程中执行的。它以相同的方式与bash相反。确保终结器符号(我的示例中的CSH_END(从第1列开始。

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

您不能像建议的那样混合它们。这就像问"我可以在Python脚本中使用PHP代码"。但是,大多数外壳都有运行命令的选项(-c(,就像CSH一样。用于在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

如果您想"源"一个文件并在两者中起作用,您可以创建一个通用包装器:

echo $shell | grep -q csh && goto CSH
# sh like
. /the/real/script.sh
return
# csh like
CSH:
source /the/real/script.csh

这确实需要通往"真实"的完整途径。脚本。要动态获取路径,您可以在bash中使用$ {bash_source},$ {0:a:a:h}在zsh和csh中$ _。我不知道有什么方法可以在sh或ksh中获得。

相关内容

  • 没有找到相关文章

最新更新