別のシェル スクリプトで実際に定義されている関数を Tcl スクリプトで呼び出すことはできますか? 例えば、
私のシェルスクリプト関数は
add ()
{
`a=$1
b=$2
c=`expr $a + $b`
`}
Tcl ファイル内でこの関数を呼び出す方法は? これで私を導いてください
いくつかの方法を除いて、別の言語で書かれた関数を Tcl から呼び出すことは実際には不可能です。たとえば、C 関数は、Tcl のコマンド定義シグネチャに準拠している場合、または何らかのグルー コードが存在する場合 (SWIG または Critcl で生成されたものなど) に呼び出すことができます。コードを呼び出すもう 1 つの方法は、別のプロセス (通常はサブプロセス) で呼び出すことです。シェル スクリプトでコマンドを実行すると、次のようになります (関数定義が にあると仮定しますmy_script.sh
)。
exec /bin/sh -c ". my_script.sh; add 123 456; echo \$c"
しかし、これはかなり扱いにくく、より複雑な入力値を処理するときに問題を引き起こす傾向があります。あなたのスクリプトをより直接的に実行できるプログラム全体に変えることをお勧めします (そうすることができますexec my_script.sh 123 456
)。あるいは、Unix シェルよりも不可解な落とし穴が少ない他の言語 (つまり、ほとんどの言語!) でスクリプトを書くことをお勧めします。
何らかの機能を実行した後にシェルスクリプトから戻り値を取得する要件がある場合は、この方法をお勧めします。
--> 各関数を別のファイルに定義し、シェル スクリプトで可能な限り、/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]#