【发布时间】:2018-10-11 14:14:25
【问题描述】:
考虑以下示例:
{ echo 1 | tee /dev/stderr 2> >(sed -e 's|1|err|' >&2) 1> >(sed -e 's|1|out|') ; }
打印出来的
out
err
请注意,out 打印在 stdout 上,err 打印在 stderr 上。
问题:如何通过ssh 远程执行此操作?
更准确地说,如何运行
ssh host 'echo 1 | tee /dev/stderr SOME_MAGIC_HERE'
圣。再次out/err 弹出stdout/stderr(对于适当的bash 魔术SOME_MAGIC_HERE)。
显然,以下工作:
ssh host 'echo 1 | tee /dev/stderr' 2> >(sed -e 's|1|err|' >&2) 1> >(sed -e 's|1|out|')
但这会在本地执行 sed,我宁愿在 host 上远程执行。
【问题讨论】:
-
你想要什么。您是否希望将
server:/dev/stderr打印到host:/dev/stderr? -
没错。在
ssh host ...之后,我想要两条消息,每条/dev/std{err,out}一条。 -
请注意,即使在当前命令中,所有内容都打印在
/dev/stdout上。您可以通过在其后面添加2>/dev/null来测试它。 -
对我来说不是这样。我正在使用
GNU bash, version 4.4.23(1)-release测试2>/dev/null。 -
键入以下内容:
{ echo 1 | tee /dev/stderr 2> >(sed -e "s|1|err|") 1> >(sed -e "s|1|out|") ; } >/dev/null和{ echo 1 | tee /dev/stderr 2> >(sed -e "s|1|err|") 1> >(sed -e "s|1|out|") ; } 2>/dev/null。问题是由于重定向,您需要在{... ; }之间放置东西。