需要帮助调用shell和TCL之间的函数

时间:2012-11-20 19:27:48

标签: bash function shell tcl

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

我的shell脚本函数是

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

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

2 个答案:

答案 0 :(得分:1)

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

exec /bin/sh -c ". my_script.sh; add 123 456; echo \$c"

但是这很笨重,并且在处理更复杂的输入值时倾向于引发问题。我建议将你的脚本变成一个可以更直接运行的整个程序(所以你可以做exec my_script.sh 123 456),或者更好的是,用一些比Unix shell更少神秘陷阱的语言编写它(即大多数语言! )

答案 1 :(得分:0)

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

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

filename :: 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]#