1

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

我的 shell 脚本函数是

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

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

4

2 回答 2

1

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

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

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

于 2012-11-20T20:08:57.270 回答
0

如果您的要求是在执行某些功能后从 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]#
于 2012-11-26T12:39:59.070 回答