Bash 在shell和TCL之间调用函数需要帮助吗
是否可以调用在shell脚本中实际定义的tcl脚本中的函数?比如说, 我的shell脚本函数是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脚本中
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?祝你好运