Scripting 在这段TCL代码中,这段代码做了什么
我很好奇这个“2>@stderrScripting 在这段TCL代码中,这段代码做了什么,scripting,tcl,tk,Scripting,Tcl,Tk,我很好奇这个“2>@stderreval exec$listCmds运行的是一个单独的程序,其名称和参数取自变量listCmds(实际上,更现代、更安全的习惯用法是exec{*}$listCmds) 2>@stderr将此程序的标准错误输出重定向到Tcl脚本的标准错误通道,请参阅 而缺少的部分是catch/exec/redirect stderr的组合:仅生成的进程的stdout将在cmdList中捕获 如果不将进程的stderr重定向到Tcl的stderr,则exec会将进程的任何stder
eval exec$listCmds
运行的是一个单独的程序,其名称和参数取自变量listCmds(实际上,更现代、更安全的习惯用法是exec{*}$listCmds
)
2>@stderr
将此程序的标准错误输出重定向到Tcl脚本的标准错误通道,请参阅
而缺少的部分是catch/exec/redirect stderr的组合:仅生成的进程的stdout将在cmdList
中捕获
- 如果不将进程的stderr重定向到Tcl的stderr,则exec会将进程的任何stderr输出视为错误:
$ echo '
set rc [catch {exec sh -c {echo to stdout; echo to stderr >&2}} result]
puts "rc=$rc result=>$result<"
' | tclsh
rc=1 result=>to stdout
to stderr<
$echo'
设置rc[catch{exec sh-c{echo to stdout;echo to stderr>&2}}结果]
将“rc=$rc result=>$result$result$result$result”添加到社区wiki中,以跟进您的答案。请随意添加或编辑。
$ echo '
set rc [catch {exec sh -c {echo to stdout; echo to stderr >&2}} result]
puts "rc=$rc result=>$result<"
' | tclsh
rc=1 result=>to stdout
to stderr<
$ echo '
set rc [catch {exec sh -c {echo to stdout; echo to stderr >&2} 2>@stderr} result]
puts "rc=$rc result=>$result<"
' | tclsh
to stderr
rc=0 result=>to stdout<
$ echo '
set rc [catch {exec sh -c {echo to stdout; echo to stderr >&2} 2>@stderr} result]
puts "rc=$rc result=>$result<"
' | tclsh 2>/dev/null
rc=0 result=>to stdout<