2016-06-15 8 views

答えて

0

グローバル変数envの配列を除いて、変数はデフォルトでインタープリタにバインドされています。この配列は、Cランタイムによってメンテナンスされている(そして実際には遅い)プロセスグローバルに割り当てられます。

他のオプションも可能です。たとえば、スレッドパッケージ内のthread-shared-variable APIを使用すると、プロセス内のすべてのスレッド間で共有される変数を持つことができます。あなたはプロセス間(またはシステム間で共有したい場合は

package require Thread 

# The lambdas do some adaptation of arguments in traces 
trace add variable foo write {apply {args { 
    global foo 
    tsv::set share Foo $foo 
}}} 
trace add variable foo read {apply {args { 
    global foo 
    set foo [tsv::get share Foo] 
}}} 
trace add variable foo unset {apply {args { 
    tsv::unset share Foo 
}}} 

:あなたは、いくつかの変数のトレースを経由してマッピングを行うことができます(シンプルなユースケースのためにのみ)もののマッピングは、デフォルトでtrue変数にではありません)、物事は少し複雑になります。それがまだ生きているなら、私はTequilaシステムを見ることをお勧めします。 localhostにしか公開されていないサーバーは、ほとんどの場合、ほとんどの場合、問題の多くは、でもではありませんが、セキュリティの結果が何であるか分かりません。

0
  • 方法#1

オリジナルスクリプト:

$ cat bar.tcl 
set script_name $argv0 
set var1 [lindex $argv 0] 
set var2 [lindex $argv 1] 
puts "$script_name: var1=$var1, var2=$var2" 
$ 

実行出力:

$ tclsh bar.tcl 10 20 
bar.tcl: var1=10, var2=20 
$ 

ラッパースクリプト:

$ cat foo.tcl 
set file_name bar.tcl 
set argv0 $file_name 
set argv [list 100 200] 
puts "Invoking $file_name" 
source $file_name 
$ 

実行出力:

$ tclsh foo.tcl 
Invoking bar.tcl 
bar.tcl: var1=100, var2=200 
$ 
  • 方法#2

ラッパー・スクリプト:

$ cat bat.tcl 
set file_name bar.tcl 
puts "Invoking $file_name" 
puts [exec tclsh $file_name 500 600] 
$ 

実行出力:

$ tclsh bat.tcl 
Invoking bar.tcl 
bar.tcl: var1=500, var2=600 
$ 
関連する問題