我想在变量中捕获命令的stdout,类似于Bash中的命令替换:
#!/bin/bash
x="$(date)"
echo $x我尝试在tclsh中做同样的事情,但是它并没有做我想做的事情:
#!/bin/tclsh
set x [date]
echo $x如果我用tclsh myscript.tclsh执行这个脚本,它会产生一个错误:
invalid command name "date"
while executing
"date "
invoked from within
"set x [ date ]"另一方面,如果我使用tclsh打开一个,它不会出现错误,echo行会打印一个空字符串。
为什么我的程序在使用或不使用REPL执行脚本时给出了不同的结果?有一种方法可以捕获shell命令的输出并将其存储在变量中,类似于Bash中的命令替换?
发布于 2020-07-01 15:30:44
当不以交互方式使用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输出完全匹配。间距不完全相同,但对于很多用途来说,这并不重要。)
https://stackoverflow.com/questions/62678823
复制相似问题