是否可以将Bourne shell脚本的所有输出重定向到某个地方,但是脚本本身内部有shell命令?
重定向单个命令的输出很简单,但我想要更像这样的东西:
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
Run Code Online (Sandbox Code Playgroud)
含义:如果脚本以非交互方式运行(例如,cron),则将所有内容的输出保存到文件中.如果从shell以交互方式运行,请让输出像往常一样转到stdout.
我想为通常由FreeBSD定期实用程序运行的脚本执行此操作.它是日常运行的一部分,我通常不会每天都看到电子邮件,所以我没有发送它.但是,如果这个特定脚本中的某些内容失败,那对我来说很重要,我希望能够捕获并通过电子邮件发送这部分日常工作的输出.
更新:Joshua的回答是正确的,但我也想在整个脚本周围保存和恢复stdout和stderr,这样做:
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
Run Code Online (Sandbox Code Playgroud) extern int ether_hostton (__const char *__hostname, struct ether_addr *__addr)
__THROW;
Run Code Online (Sandbox Code Playgroud)
我在Linux机器上的/usr/include/netinet/ether.h中找到了上面的函数定义.
有人可以在const(关键字),addr(标识符)和最后__THROW前面解释双下划线的含义.
在 Python 中,当您创建一个模块时,您会创建一个__init__.py文件(至少通常如此)。是否有 C/C++ 等价物?我的意思是有没有办法让#include目录实际上包含一个文件?
这似乎是相当基本的功能,但是,无论我看到哪里,答案似乎都是否定的.
事情就是这样:我有一个文件夹,里面有我需要包含在c ++应用程序中的文件.它们都被命名为"FileX.h",其中X是1到400之间的数字.我这样做是因为我认为有一种方式我可以说#include"File*.h"之类的东西,它会包含每个文件符合这种模式.包含文件的顺序无关紧要.我现在意识到我可能应该把文件变成共享库或类似的东西,但为了将来的参考,我真的想知道这是否可行.
那么,是否有一些#include语句包含所有这些文件?或者,如果失败了,有没有办法在c ++中包含一个完整的目录文件(即#include"C:/ project/includes /")?
谢谢!
我已将每个函数放在自己的文件中.
如何一次性包含所有这些功能而不必手动重复每个文件的#include?我不在乎功能包含在哪个顺序.
编辑:来自数百个不同文件的所有功能属于同一组.实际上每个文件有4个功能......