是否可以在tcl脚本中调用一个在shell脚本中实际定义的函数?例如,
我的shell脚本函数是
add ()
{
`a=$1
b=$2
c=`expr $a + $b`
`}
如何在tcl文件中调用此函数?请指导我这个
答案 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]#