首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Awk检测stdin

Awk检测stdin
EN

Unix & Linux用户
提问于 2018-03-31 14:22:47
回答 2查看 564关注 0票数 0

Perl、Ruby和PHP可以检测stdin:

代码语言:javascript
运行
复制
$ perl -e 'print -t ? "no stdin" : "stdin"'
no stdin

$ echo | perl -e 'print -t ? "no stdin" : "stdin"'
stdin

$ ruby -e 'puts $stdin.isatty ? "no stdin" : "stdin"'
no stdin

$ echo | ruby -e 'puts $stdin.isatty ? "no stdin" : "stdin"'
stdin

$ php -r 'print posix_isatty(STDIN) ? "no stdin" : "stdin";'
no stdin

$ echo | php -r 'print posix_isatty(STDIN) ? "no stdin" : "stdin";'
stdin

奥克有办法这么做吗?我尝试过ARGC,但在这两种情况下都是一样的:

代码语言:javascript
运行
复制
$ awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin

$ echo | awk 'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'
no stdin
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-03-31 14:48:59

您的perl、ruby和php示例测试stdin是否存在。您的awk方法只是测试是否应该使用stdin。

您可以在awk中使用system("tty")来实现这一点。

票数 3
EN

Unix & Linux用户

发布于 2018-03-31 14:46:04

ARGC是存在的命令行参数的数量。(从1编制索引)

在上述两种情况下,awk命令/表达式'BEGIN {print ARGC == 1 ? "no stdin" : "stdin"}'都被视为第一个参数,而不依赖于是否有任何数据被管道传输到当前命令。

若要检查连接到标准输入的终端的文件名,请执行以下操作:

代码语言:javascript
运行
复制
echo "a" | awk 'BEGIN { "tty" | getline r;  print r == "not a tty"? "stdin" : "no stdin" }'
stdin

awk 'BEGIN { "tty" | getline r;  print r == "not a tty"? "stdin" : "no stdin" }'
no stdin
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/434678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档