我正在为Linux编写命令行实用程序.如果输出(stdout)转到shell,那么打印一些转义来着色输出会很不错.但是如果输出被重定向,则不应该打印那些bash转义,或者内容可能会破坏依赖于该输出的解析器.
有几个程序执行此操作(吮吸ack),但我发现的是用Perl编写的,我无法找到他们是如何做到的.
我想用C/C++来编写我的实用程序.
看看这段代码:
int is_redirected(){
if (!isatty(fileno(stdout))){
fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
return 1;
}
return 0;
}
/* ... */
int main(int argc, char **argv){
if (is_redirected()) exit(-1);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
如果重定向程序,该函数将返回1.请注意main(...)它的调用方式.如果程序要运行并被重定向到stderr文件或程序,则程序立即退出.
在(非标准)C 中,您可以使用 isatty()。在 perl 中,它是通过 -t 运算符完成的:
$ perl -E '说 -t STDOUT' 1 $ perl -E '说 -t STDOUT' | 猫 $
在 shell 中您可以使用测试:
$ test -t 1 && echo 是一个 tty 是一个 tty $ (test -t 1 && echo 是 tty ) | 猫 $
| 归档时间: |
|
| 查看次数: |
3653 次 |
| 最近记录: |