#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"
exec -ignorestderr -- {*}$argv >@stdout 2>@stderr
exit
_
$ wish test.sh -- sh -c date 2>&1 | cat
Thu Feb 13 23:08:09 2014
如果我没有管道stdout或stderr,我得到:channel wasn't opened for writing
。但是如果它关闭了,我希望tcl将关闭的文件描述符传递给子进程。我不希望tcl捕获命令的输出。
答案 0 :(得分:0)
请勿在{{1}}的同时使用stderr
的重定向。该选项在内部使用重定向(进入一个简单排放的管道),所以当你混合这两个东西时,它们会争夺子进程真正标准错误通道的配置。你不希望这样。
在您的具体情况下,由于您希望通过-ignorestderr
进行连接,因此请忽略stderr
选项。
-ignorestderr
请注意,使用已关闭的exec -- {*}$argv >@stdout 2>@stderr
与不同!这导致各种各样的事情破裂;你遇到过的几乎每一个Unix进程都认为它是开放的,并且只能写入它。
答案 1 :(得分:-1)
我多次阅读你的问题,但仍然无法理解你的尝试。但是,您的脚本似乎太复杂了。如果你想要做的就是捕获date
命令的输出:
set output [exec date]
puts $output; # Delete this line if you don't want any output.
只需拨打date
即可,您无需执行此操作:
sh -c date 2>&1 | cat
我知道这可能不是您正在寻找的答案。如果您仍需要帮助,请在您的问题中进一步说明。