是否可以在 tcl 脚本中调用实际上在另一个 shell 脚本中定义的函数?例如,
我的 shell 脚本函数是
add ()
{
`a=$1
b=$2
c=`expr $a + $b`
`}
如何在 tcl 文件中调用此函数?请指导我
除了几种方式外,实际上不可能从 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 具有更少的神秘陷阱(即,大多数语言!)
如果您的要求是在执行某些功能后从 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]#