我有一个奇怪的情况。我需要在脚本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与在简单执行命令时使用tclsh之间的区别是什么。
由于
答案 0 :(得分:0)
我想通了,愚蠢的错误。
使用&lt;&lt;在这里被称为... heredoc?
我过去曾经使用过一些但不多,我挖出了一个较旧的例子,并意识到变量在被发送之前已经扩展。我必须逃避它们。
这有效:
#!/bin/sh
#
tclsh << EOSCRIPT
set val [exec getValue.itcl PARAMETER]
puts "\$val"
EOSCRIPT
exit 0