为什么 exec 命令在 TCL 上不起作用?

时间:2021-03-21 08:47:05

标签: linux tcl

我是 TCL 的新手。我用以下代码制作了一个脚本:

if {[file exists /proc/cpuinfo]} {
  exec grep "model name" /proc/cpuinfo
  exec grep "cpu MHz"    /proc/cpuinfo
}

puts "Hostname : [info hostname]"

由于某种原因,没有执行 exec 命令。即使我取出括号,该命令也不起作用。 此外,如果我在 tclsh 中按命令执行命令,它可以正常工作。

tclsh
%exec grep "model name" /proc/cpuinfo
model name :Intel(R) Xeon(R) CPU    @2.53GHz
%exec grep "cpu MHz" /proc/cpuinfo
cpu MHz    :2533.423

1 个答案:

答案 0 :(得分:2)

我将稍微扩展一下 Shawn 正确写的内容,因为这种行为对于 tclsh 的新手(如我)来说是非常出乎意料的,尽管 exec manual page 中的这些词对此进行了解释:

<块引用>

如果标准输出没有被重定向,那么 exec 命令返回上一个命令的标准输出......

它特别说 returns,这并不意味着它被打印出来,而是如果我们不对输出做一些事情,比如像你一样将它传递给 puts,它就会被丢弃用 [info hostname] 做的:

  puts [exec grep "model name" /proc/cpuinfo]
  puts [exec grep "cpu MHz"    /proc/cpuinfo]

我们在交互模式下没有 puts 就可以离开,因为那里的命令结果是自动打印的。