在shell脚本

时间:2016-05-19 13:27:13

标签: exec sh tclsh

我有一个奇怪的情况。我需要在脚本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之间的区别是什么。

由于

1 个答案:

答案 0 :(得分:0)

我想通了,愚蠢的错误。

使用&lt;&lt;在这里被称为... heredoc?

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

这有效:

#!/bin/sh
#

tclsh << EOSCRIPT

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

exit 0