我这里有个奇怪的情况。我需要在脚本getValue.itcl上运行exec,但是如果我试图以内联输入重定向的方式运行它,我将得不到任何输出。如果我使用了错误的术语,很抱歉。
内联使用它有助于此脚本的其他方面,否则我将需要分开各个部分。我使用的是TCL8.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有什么不同。
谢谢
发布于 2016-05-20 03:12:43
我想通了,愚蠢的错误。
在这里,使用<<被称为document...heredoc?
我在过去用过一些,但用得不多,我翻出了一个更老的例子,并意识到变量在被发送之前是扩展的。我必须逃离他们。
这是可行的:
#!/bin/sh
#
tclsh << EOSCRIPT
set val [exec getValue.itcl PARAMETER]
puts "\$val"
EOSCRIPT
exit 0https://stackoverflow.com/questions/37324650
复制相似问题