如何在tclsh中执行命令替换?
我想在变量中捕获命令的stdout,类似于Bash中的命令替换:如何在tclsh中执行命令替换?,tcl,tclsh,Tcl,Tclsh,我想在变量中捕获命令的stdout,类似于Bash中的命令替换: #/bin/bash x=“$(日期)” echo$x 我尝试在Tcsh中执行相同的操作,但它不能满足我的要求: #/bin/tclsh 设定x[日期] echo$x 如果使用tclsh myscript.tclsh执行脚本,则会出现错误: invalid command name "date" while executing "date " invoked from w
#/bin/bash
x=“$(日期)”
echo$x
我尝试在Tcsh中执行相同的操作,但它不能满足我的要求:
#/bin/tclsh
设定x[日期]
echo$x
如果使用tclsh myscript.tclsh
执行脚本,则会出现错误:
invalid command name "date"
while executing
"date "
invoked from within
"set x [ date ]"
另一方面,如果我用tclsh
打开一个TCL交互式shell,它不会给出错误,echo
行打印一个空字符串
为什么我的程序在执行带有或不带REPL的脚本时会给出不同的结果?如果没有一种方法可以捕获shell命令的输出并将其存储在变量中,类似于Bash中的命令替换?如果不以交互方式使用Tcl,则需要显式使用
exec
命令来运行子进程
set x [exec date]
# Tcl uses puts instead of echo
puts $x
在交互使用中,未知的命令处理程序会猜测这就是您想要的。在某些情况下。请在脚本中明确说明
您可能应该将运行
date
子流程替换为对内置clock
命令的适当调用:
# Get the timestamp in seconds-from-the-epoch
set now [clock seconds]
# Convert it to human-readable form
set x [clock format $now -format "%a %d %b %Y %H:%M:%S %Z"]
(这几乎完全符合该系统上日期的输出。间距不太一样,但这对许多用途来说并不重要。)交互式用途是由神奇的全球政府管理的。我不打算在这里写它,因为你根本不应该在脚本中使用它。神奇的快捷方式对于交互式使用来说都是非常好的,但是在制作一个可靠的程序时,它们的伤害往往远远大于它们的帮助……谢谢!我只是用
date
来保持问题的简洁,但是clock
的建议也很有用。