我知道以前有人问过这个问题。
但是听我说一次..
我正在使用 Cisco 路由器 (IOS)。
我必须编写一个脚本来执行一些命令并将它们的输出重定向到一个文件。但是我不想使用tee
每个命令,而是想打开一个文件然后运行命令,其输出将被重定向到该文件,然后关闭该文件。
甚至重定向运算符>
也不起作用或以下答案:
我知道以前有人问过这个问题。
但是听我说一次..
我正在使用 Cisco 路由器 (IOS)。
我必须编写一个脚本来执行一些命令并将它们的输出重定向到一个文件。但是我不想使用tee
每个命令,而是想打开一个文件然后运行命令,其输出将被重定向到该文件,然后关闭该文件。
甚至重定向运算符>
也不起作用或以下答案:
该问题中的解决方案对您不起作用的事实是有益的:您遇到的真正问题是 Tcl 命令通常不会写入任何内容stdout
(除了puts
,它的主要工作parray
是内部使用的过程puts
)。您习惯的“写入stdout
”只是交互式 Tcl shell 的一个特性。
要在运行脚本时捕获所有命令的结果,您需要这样的包装器:
trace add execution source leavestep log_result
proc log_result {cmd code result op} {
puts stdout $result
}
source theRealScript.tcl
你会发现它产生了大量的输出。减少输出是一件相当有用的事情,因此这会将其减少为仅立即执行的命令(而不是它们调用的所有命令):
trace add execution source enterstep log_enter
trace add execution source leavestep log_result
proc log_enter {args} {
global log_depth
incr log_depth
}
proc log_result {cmd code result op} {
global log_depth
if {[incr log_depth -1] < 1 && $result ne ""} {
puts stdout $result
}
}
source theRealScript.tcl
你可能仍然会得到比你想要的更多的输出......</p>