如何重定向stderr(或stdout+ stderr)到一个文件,如果我不知道是哪个壳(bash,csh,dash)是解释我的命令?
我在Linux / FreeBSD / OSX上运行的C代码需要通过system()函数调用外部程序,该函数将用于/bin/sh解释提供的命令行。我想捕获该外部程序打印到的消息stderr,并将其保存到文件中。问题在于,在不同的系统上/bin/sh指向具有不同语法的不同shell,这些语法用于将stderr流重定向到文件。
我发现的最接近的东西是bash实际上了解csh将stderr+ 重定向stdout到文件的-style语法:
some_program >& output.txt
Run Code Online (Sandbox Code Playgroud)
但是dash,这是Ubuntu上的默认外壳程序(即非常常见),无法理解该语法。
是否有stderr所有通用shell都能正确解释的重定向语法?或者,有没有办法告诉system()(或其他一些类似的C函数)使用/usr/bin/env bash而不是/bin/sh解释所提供的命令行?