【问题标题】:What is a cross-platform compatible way to redirect to NUL or /dev/null?重定向到 NUL 或 /dev/null 的跨平台兼容方式是什么?
【发布时间】:2014-10-15 17:53:57
【问题描述】:

在 Windows 上,可以使用> NUL 将管道重定向到空。在 Linux 上,使用> /dev/null。是否有跨平台兼容的方式将管道重定向到两个平台的空?换句话说,我可以使用它而不必担心命令在哪个平台上执行。

例如,我希望能够将以下命令写成一个命令。

echo Hello > NUL
echo Hello > /dev/null

当然,任何更复杂的事情都需要单独的脚本。用例是从跨平台语言(例如 Java、Python)执行的单个命令。我想避免必须检测平台,而是使用通用解决方案。

此外,该用例将访问 100 台机器,安装将比简单地检测平台和调整命令更复杂。

【问题讨论】:

  • if (windows) { > NUL } else { > /dev/null }
  • 我看不出这有什么用...这不是shcmd.exe之间的唯一区别,无论如何你都必须编写单独的脚本这更进一步“启动此命令”。
  • 您可以编写一个适当重定向的 shell 函数/doskey 宏,然后执行tonull echo Hello 之类的操作。尽管 Matteo 的观点很扎实——这很难用于任何现实的事情。您可以获取 cygwin 并在 Windows 上运行 shell 脚本。
  • @MatteoItalia 这是使我的 NPM 脚本完全跨平台(以抑制一些嘈杂的日志记录)所需的最后一件事。所以是的,这很有用。
  • 我认为这是一个很好的问题,但不幸的是,对我们来说,答案似乎是没有这样的跨平台方式...... :(

标签: linux windows command-line io-redirection


【解决方案1】:

如果您只对运行命令和(可能)它的返回码感兴趣,为什么不让调用/父应用程序接收并丢弃任何输入?它通常会涉及设置管道或流(例如for Java)和可能的单独线程,但它不应该太复杂。

如果您提到要启动哪个命令以及原因,这可能会有所帮助。例如,类 Unix 系统上的某些命令有一个特殊的命令行选项,可以抑制大部分输出。

【讨论】:

    【解决方案2】:

    编写一个简单的 C 程序,它接受来自 stdio 的所有输入并忽略它。

    将您的程序命名为null 之类的名称,并将其放在您的操作系统的PATH 中。

    那么,你可以这样做:

    echo Hello | null
    

    程序很简单。它不仅仅是“hello world”。

    【讨论】:

    • 好主意。我面临的特定用例需要在很多机器上安装这样的程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2022-11-29
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多