Bash 在shell和TCL之间调用函数需要帮助吗

Bash 在shell和TCL之间调用函数需要帮助吗,bash,function,shell,tcl,Bash,Function,Shell,Tcl,是否可以调用在shell脚本中实际定义的tcl脚本中的函数?比如说, 我的shell脚本函数是 add () { `a=$1 b=$2 c=`expr $a + $b` `} 如何在tcl文件中调用此函数?请告诉我这个从Tcl调用用另一种语言编写的函数实际上是不可能的,除非有几种方法。例如,如果C函数符合Tcl的命令定义签名,或者存在一些粘合代码(例如可能使用SWIG或Critcl生成),则可以调用它。调用代码的另一种方法是在另一个进程(通常是子进程)中调用代码。然后,在shell脚本中

是否可以调用在shell脚本中实际定义的tcl脚本中的函数?比如说,

我的shell脚本函数是

add ()
{
 `a=$1
 b=$2
 c=`expr $a + $b`
`}

如何在tcl文件中调用此函数?请告诉我这个

从Tcl调用用另一种语言编写的函数实际上是不可能的,除非有几种方法。例如,如果C函数符合Tcl的命令定义签名,或者存在一些粘合代码(例如可能使用SWIG或Critcl生成),则可以调用它。调用代码的另一种方法是在另一个进程(通常是子进程)中调用代码。然后,在shell脚本中运行命令可能会这样做(假设您的函数定义位于
my_script.sh
):


但这相当笨拙,而且在处理更复杂的输入值时容易引起问题。我建议将您的脚本转换为一个可以更直接运行的完整程序(这样您就可以执行
exec my_script.sh 123 456
),或者更好的做法是,使用比Unix shell(即大多数语言)具有更少神秘陷阱的其他语言编写脚本

除了通过几种方式之外,实际上不可能从Tcl调用用另一种语言编写的函数。例如,如果C函数符合Tcl的命令定义签名,或者存在一些粘合代码(例如可能使用SWIG或Critcl生成),则可以调用它。调用代码的另一种方法是在另一个进程(通常是子进程)中调用代码。然后,在shell脚本中运行命令可能会这样做(假设您的函数定义位于
my_script.sh
):


但这相当笨拙,而且在处理更复杂的输入值时容易引起问题。我建议将您的脚本转换为一个可以更直接运行的完整程序(这样您就可以执行
exec my_script.sh 123 456
),或者更好的做法是,使用比Unix shell(即大多数语言)具有更少神秘陷阱的其他语言编写脚本

如果您的需求是在执行某些功能后从shell脚本获得任何返回值,我建议使用这种方法

-->在单独的文件中定义每个函数,如果可能,在shell脚本中,将返回值写入/tmp目录中的某个文件

文件名::add.sh:

function add ()
{
 a=$1
 b=$2
 c=`expr $a + $b
echo $c > /tmp/arg1
}

add $1 $2
::::::::::::::

现在打开tclsh

[root@localhost test]# tclsh
%
% ./add.sh 2 3
% set fp [open /tmp/arg1]
file3
% set value [read $fp]
5

% close $fp
% set value
5

% ^C
[root@localhost test]#

如果您的需求是在执行某些功能后从shell脚本获得任何返回值,我建议使用这种方法

-->在单独的文件中定义每个函数,如果可能,在shell脚本中,将返回值写入/tmp目录中的某个文件

文件名::add.sh:

function add ()
{
 a=$1
 b=$2
 c=`expr $a + $b
echo $c > /tmp/arg1
}

add $1 $2
::::::::::::::

现在打开tclsh

[root@localhost test]# tclsh
%
% ./add.sh 2 3
% set fp [open /tmp/arg1]
file3
% set value [read $fp]
5

% close $fp
% set value
5

% ^C
[root@localhost test]#

很难相信tcl没有您所需要的功能,为什么不在tcl中编写全部内容呢?或者您的add()示例函数是否是一个需要重写的更大代码体的placeHolder?祝你好运。很难相信tcl没有你需要的功能,为什么不直接用tcl来写呢?或者您的add()示例函数是否是一个需要重写的更大代码体的placeHolder?祝你好运