【问题标题】:bash stdout some information and pipe other from inside loopbash stdout 一些信息并从内部循环管道其他信息
【发布时间】:2020-01-25 18:00:15
【问题描述】:

如何从通过管道传输到其他命令的循环中打印输出:

for f in "${!myList[@]}"; do 
    echo $f > /dev/stdout # echoed to stdout, how to?
    unzip -qqc $f # piped to awk script
done | awk -f script.awk

【问题讨论】:

  • 使用 Linux:echo "$f" >&255
  • @Cyrus 不起作用,但 echo "$f" >&2 起作用。

标签: bash loops pipe


【解决方案1】:

您可以使用/dev/stderr 或第二个文件描述符:

echo something >&2 | grep nothing
echo something >/dev/stderr | grep nothing

您可以使用另一个将连接到标准输出的文件描述符:

# for a single command group
{ echo something >&3 | grep nothing; } 3>&1
# or for everywhere
exec 3>&1
echo something >&3 | grep nothing
# same as above with named file descriptor
exec {LOG}>&1
echo 123 >&$LOG | grep nothing

您也可以将输出重定向到当前控制终端/dev/tty(如果有的话):

echo something >/dev/tty | grep nothing

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多