【问题标题】:Ambiguous redirect when redirecting to multiple files using Bash使用 Bash 重定向到多个文件时的不明确重定向
【发布时间】:2010-12-22 00:57:32
【问题描述】:
$ echo "" >  /home/jem/rep_0[1-3]/logs/SystemOut.log
bash: /home/jem/rep_0[1-3]/logs/SystemOut.log: ambiguous redirect

我可以一次重定向到多个文件吗?

编辑:任何允许使用不明确的文件引用的答案?

【问题讨论】:

    标签: bash redirect pipe


    【解决方案1】:

    这就是 tee 的用途:

    command | tee file1 file2 file3 > file4
    

    tee 还输出到标准输出,因此您可能希望在重定向后放置一个文件(如上所示),或者将标准输出发送到/dev/null

    对于您的情况:

    echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log >/dev/null
    

    【讨论】:

    • 在嵌入式 f.e. 上也非常有用。关闭路由器上的所有 LED echo none|tee /sys/class/leds/*/trigger; echo 0|tee /sys/class/leds/*/brightness
    【解决方案2】:

    您可以使用tee 执行此操作,它从标准输入读取并写入标准输出和文件。由于tee 也输出到标准输出,我选择将其输出定向到/dev/null。请注意,bash 扩展与现有文件匹配,因此您尝试写入的文件必须在执行此命令之前存在。

    $ echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log > /dev/null
    

    附带说明,您传递给echo"" 是多余的。

    与您的问题没有直接关系,但如果您不依赖 bash 扩展,您可以拥有多个管道。

    $ echo hello > foo > bar > baz
    $ cat foo bar baz
    hello
    hello
    hello
    

    【讨论】:

      【解决方案3】:

      我有同样的问题,只是想用通配符添加示例,因为它没有显示。我想这就是你要找的东西:

      echo "" | tee *.log
      

      【讨论】:

      • 正是我需要的,完美。
      【解决方案4】:

      你可以这样做:

      echo "" | tee /home/jem/rep_0{1..3}/logs/SystemOut.log
      

      要禁止输出到标准输出,请将其添加到上述命令的末尾:

      > /dev/null
      

      您问题中的echo 命令(不需要空引号)只是在文件中添加一个换行符。如果要创建空文件,请使用touch 命令。

      【讨论】:

      • 不只是放置,用换行符覆盖内容。
      【解决方案5】:

      没有。两次使用tee 怎么样?

      echo "Your text" | tee file1 | tee file2 > file3
      

      【讨论】:

      • 谢谢。我忽略了指定我想使用通配符文件引用。
      • 您可以为tee 指定多个参数。您无需运行两次。
      • @Dennis - 不知道。每天学习新东西!
      【解决方案6】:

      管道到“tee”命令以分支到文件和标准输出,级联 tee 命令

      【讨论】:

      • 谢谢。我忽略了指定我想使用通配符文件引用。
      • 您可以为tee 指定多个参数,而不是级联它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多