LINUX.ORG.RU

button -command не работает с командой

 ,


1

1

Есть такой скрипт:

#!/bin/sh
# calling wish \
exec wish "$0" ${1+"$@"}

set cmakeBinName "<noname>"

proc Get_CMakeBin {} {
    set cmakeBinName [ tk_getOpenFile -initialdir / ]
}


label .l  -text { CMake bin: }
label .lb -bg white -width 24 -textvar cmakeBinName
button .cmb -text "..." -command "set cmakeBinName \[ tk_getOpenFile -initialdir / \]"
# button .cmb -text "..." -command Get_CMakeBin

grid .l .lb .cmb
Помогите, пожалуйста, разобраться, почему не работает закомментированная строка. Что я пропустил? Заранее благодарен.

★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Ты забыл объявить глобальную переменную внутри процедуры.

proc Get_CMakeBin {} {
    global cmakeBinName
    set cmakeBinName [ tk_getOpenFile -initialdir / ]
}

gorky ★★
()
#!/bin/sh
# calling wish \
exec wish "$0" ${1+"$@"}

set cmakeBinName "<noname>"

proc Get_CMakeBin {varname} {
    upvar \#0 $varname var
    set var [ tk_getOpenFile -initialdir / ]
}


label .l  -text { CMake bin: }
label .lb -bg white -width 24 -textvar cmakeBinName
# button .cmb -text {...} -command {set cmakeBinName [ tk_getOpenFile -initialdir / ]}
button .cmb -text {...} -command {Get_CMakeBin cmakeBinName}

grid .l .lb .cmb
anonymous
()
Ответ на: комментарий от gorky

Спасибо, еще надо было

-textvar cmakeBinName

braboar ★★
() автор топика
Ответ на: комментарий от braboar

Эта магия уже не актуальна, используй /usr/bin/env wish например.

А так Tcl считает

\
exec wish "$0" ${1+"$@"}

Продолжением комментария и не исполняет, а sh не считает и исполняет, передавая wish аргументы с которыми был запущен скрипт.

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

Но может пригодиться на случай, если подстветка синтаксиса в любимом редакторе этого не понимает (несколько лет назад тот же Vim красил строку, начиная с #, даже если этот символ не начинал комментарий).

TeopeTuK ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.