【问题标题】:Send terminal output of software to file or /dev/null将软件的终端输出发送到文件或 /dev/null
【发布时间】:2018-10-29 16:22:14
【问题描述】:

我正在使用一个名为 Velvet 的程序(我们在生物信息学中称之为汇编程序)。该软件没有静音或安静模式选项,我有一个脚本多次运行它,导致它使我的终端充满在那一刻对我没有真正意义的文本(打印了大约 100 行文本每次迭代)。

我已尝试通过这样做将此输出发送到/dev/null

[Terminal@Session]$ velvet -option1 -option2 -file1 -file2 > /dev/null

但是,这会导致 shell 抱怨分段错误,并且软件实际上根本没有运行。我觉得这是一个语法问题,因为像我一样尝试将内容发送到 /dev/null 可能会干扰预期的软件语法,因此会出现错误。我似乎无法在任何地方找到解决方案。我可以使用其他语法来重定向输出吗?

【问题讨论】:

  • 你知道stderr,也可以重定向?我不明白段。错了,velvet -option1 -option2 -file1 -file2 > /tmp/velvet1.out 2>/tmp/velvet2.out 也有这个吗?
  • 使用strace 运行可能会提供一些提示,说明问题出在程序的哪个位置以及如何解决问题。
  • 您使用的是什么操作系统和外壳?你能分享你运行的确切命令吗?
  • 您的方法有效@WalterA,您可以将其发布为答案吗?只是为了补充我在 Debian GNU/Linux 9 上,我的 shell 是 GNU bash 4.4.12(1)。发生段错误时我的命令是velveth test 31 -fastq.gz -shortPaired -separate R1.fastq.gz R2.fastq.gz > /dev/null
  • 我发现 velvet 在它自己的测试中做到了这一点。 github.com/dzerbino/velvet/blob/master/tests/…

标签: shell io-redirection dev-null


【解决方案1】:

你的语法很好。 Velvet 崩溃了,这不是外壳的错。奇怪和不幸的是,当输出被重定向和发送到终端时,它的运行方式不同,但这不是你做的。程序很少关心 stdout 的重定向位置。 > /dev/null 对 99+% 的程序是安全的。 (有时 stderr 也需要重定向,但这是另一个话题。)

Velvet 是否有用于更安静输出的命令行选项?许多程序都有-q--quiet 或类似的东西。

【讨论】:

  • Dang,所以如果这是真的,那么我认为没有什么可以做 D:不幸的是,它没有安静的选项
【解决方案2】:

OP 确认我在评论中的提议有效,即使不知道原因。
您可以使用

将输出重定向到“正常”文件
velvet -option1 -option2 -file1 -file2 > /tmp/velvet1.out 2>/tmp/velvet2.out

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2017-12-01
    • 2016-01-20
    相关资源
    最近更新 更多