Нет вывода из exec при использовании tclsh внутри сценария оболочки

У меня тут странная ситуация. Мне нужно запустить exec для сценария getValue.itcl, но я не получаю никаких результатов, если пытаюсь запустить его в строке с перенаправлением ввода. Извините, если я использую неправильные термины.

Использование встроенного кода помогает с другими аспектами этого скрипта, иначе мне пришлось бы разделить его на части. И я использую tcl 8.0 (без вариантов).

Пример: это работает, когда я использую сценарий оболочки, который перезапускается как tclsh.

#!/bin/sh
#

# \
cd 'dirname $0'
# Next line restarts as tclsh \
exec tclsh 'basename $0' $*

proc Main { } {
    set val [exec getValue.itcl PARAMETER]
    puts "$val"
}
Main
exit

Но если я запущу это по-другому в скрипте, это не сработает.

Это не работает:

#!/bin/sh
#

tclsh << EOSCRIPT

    set val [exec getValue.itcl PARAMETER]
    puts "$val"
EOSCRIPT

exit 0

Я не получу никакого вывода, я не вижу, в чем разница между использованием tclsh в первом методе и вторым, когда дело доходит до простого выполнения команды.

Спасибо


person crt79    schedule 19.05.2016    source источник


Ответы (1)


Я понял, глупая ошибка.

Использование ‹‹ называется здесь документ...heredoc?

Я использовал их немного в прошлом, но не так часто, я откопал более старый пример и понял, что переменные расширяются перед отправкой. Мне нужно их избегать.

Это работает:

#!/bin/sh
#

tclsh << EOSCRIPT

    set val [exec getValue.itcl PARAMETER]
    puts "\$val"
EOSCRIPT

exit 0
person crt79    schedule 19.05.2016