【问题标题】:bash output to filebash 输出到文件
【发布时间】:2011-08-14 21:23:00
【问题描述】:

我有以下说法

 for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc; done

但它一直将所有输出写入控制台而不是文件“out.asc”。请你帮我将输出重定向到文件而不是屏幕。提前致谢!

【问题讨论】:

  • 查看tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html。也许样本 3.6 最适合您。
  • 您还应该养成引用变量的习惯。在这种情况下"$i"。这很重要,因为如果您的变量包含特殊字符,它将不会被转义。

标签: linux bash wine


【解决方案1】:

可能是wine正在写入stderr,所以你需要重定向它:

for i in `cat i.txt`; do wine ~/run.exe $i.asc 2>> out.asc; done

注意2>> 运算符中的2,这意味着stderr。

【讨论】:

  • 这不会将标准输出输出到 out.asc。只有 stderr 会被重定向。
  • 所以,>> out.asc 2>&1 将重定向两者
【解决方案2】:

尝试将 stderr (2) 重定向到 stdout (1)

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; done

【讨论】:

    【解决方案3】:

    也许您有标准输出和错误输出。使用>>2>> 将两个输出流重定向到您的文件。

    for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>> out.asc; done
    

    您可以选择将源重定向到不同的文件:

    for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>> err.asc; done
    

    【讨论】:

      【解决方案4】:

      其他人已经回答了你的实际问题,我想展示一个更好的习惯用法来读取文件的行。

      代替

      for i in `cat i.txt`; do
        : do something with $i
      done
      

      试试

      while IFS= read -r line; do
        : do something with "$i"
      done < i.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2022-01-03
        • 1970-01-01
        • 2016-11-29
        • 2020-03-22
        • 2023-03-24
        • 1970-01-01
        相关资源
        最近更新 更多