如何在同一个脚本中同时调用BASH和CSH shell

tcomlyy6  于 2023-06-24  发布在  Shell
关注(0)|答案(3)|浏览(187)

在同一个脚本中,我想使用一些CSH命令和一些BASH命令。一个接一个地调用给我带来了问题,尽管我遵循的是各个shell的不同语法。我想知道我的代码中的错误是你的建议是赞赏!!
我是shell的初学者,尤其是CSH。但我得到的代码完全是用CSH写的由于我对CSH比较熟悉,所以我想通过包含BASH命令来调整现有的CSH代码,我很喜欢使用这些命令。当我尝试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:未定义变量。”

j91ykkif

j91ykkif1#

你在这里要求“将一种语言嵌入到另一种语言中”,正如@Bayou已经解释的那样,它不直接支持。也许你被HTML世界宠坏了,在那里你可以把CSS和JavaScript挤在中间,也许还可以使用一些服务器端的PHP或Ruby的东西。
最接近这一点的是这里的文件。如果在bash脚本中编写一个

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

这些命令在由CSH驱动的子进程中执行。它的工作方式与bash的工作方式相同。确保终止符符号(在我的示例中为CSH_END)从列1开始。
我不能说这是否适用于您的应用程序,因为在原始脚本中在同一进程中运行的东西现在在不同的进程中运行。

quhf5bfb

quhf5bfb2#

你不能像你说的那样把它们混在一起。这就像问“我可以在Python脚本中使用PHP代码吗”。然而,大多数shell都有运行命令(-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
3gtaxfhh

3gtaxfhh3#

如果你想能够“源”一个文件并让它在两个文件中工作,你可以创建一个通用的 Package 器:

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},在zsh中使用${0:a:h},在csh中使用$_。我不知道有什么方法可以在sh或ksh中得到它。

相关问题