0

我这里有一个奇怪的情况。我需要在脚本 getValue.itcl 上运行 exec,但如果我尝试使用输入重定向内联运行它,我将没有得到任何输出。抱歉,如果我使用了错误的术语。

内联使用它有助于此脚本的其他方面,否则我需要分开各个部分。我正在使用 tcl 8.0(没有选项)。

示例:当我使用作为 tclsh 重新启动的 shell 脚本时,此方法有效。

#!/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 与在第二种方法中简单地执行命令时有什么区别。

谢谢

4

1 回答 1

0

我想通了,愚蠢的错误。

使用 << 被称为此处文档...heredoc?

我过去使用过它们,但不多,我挖了一个较旧的示例,并意识到变量在被发送之前已经扩展。我必须逃避它们。

这有效:

#!/bin/sh
#

tclsh << EOSCRIPT

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

exit 0
于 2016-05-19T19:12:42.730 回答