我编写了一个脚本,我想通过管道或提供文件名作为参数来输入。 ARGF可以很容易地灵活处理这个问题,除了在都没有提供的错误使用情况下,在这种情况下STDIN被打开并且它会挂起,直到用户在控制台上输入内容为止。
我想抓住这个不正确的用法来显示错误信息并退出程序,但我找不到办法。 ARGF.eof?
似乎是一个可能的候选人,但在收到一些意见之前它也会挂起。
Ruby是否有一种简单的方法可以区分管道提供的STDIN和控制台提供的STDIN?
答案 0 :(得分:1)
你可以使用
$stdin.tty?
例如
$ ruby -e 'puts $stdin.tty?'
> true
$ echo "hello" | ruby -e 'puts $stdin.tty?'
> false