加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 测试正在等待stdin的脚本

发布时间:2020-12-15 18:37:26 所属栏目:安全 来源:网络整理
导读:有没有办法确定脚本是否在stdin上等待并导致命令在检测到时退出? 这是一个例子,我正在执行的命令需要很长时间才能运行,但在启动w / o提示之前它也会提示输入.我想知道命令实际上在做什么而不仅仅是等待. 提供了以下脚本名为./demo #!/bin/bashread 有没有办
有没有办法确定脚本是否在stdin上等待并导致命令在检测到时退出?

这是一个例子,我正在执行的命令需要很长时间才能运行,但在启动w / o提示之前它也会提示输入.我想知道命令实际上在做什么而不仅仅是等待.

提供了以下脚本名为./demo

#!/bin/bash

read

有没有办法检测读取正在等待stdin?就像是

failifwaitingonstdin | ./demo

一旦检测到读取命令,它将立即返回.

更新:

人们建议像期待和是的程序.在深入了解之后,我看到他们如何能够支持这种交互方式.他们经常使用fputs将’y’写入stdout.而不是无限地执行此操作,只要fputs在写入stdout时返回,我就可以简单地返回错误.

如果您对脚本和/或命令更具体,那将非常有用.但是如果你想要做的是测试stdin来自哪里,这个示例脚本将为你演示:
#!/bin/bash
if [[ -p /dev/stdin ]]
then
    echo "stdin is coming from a pipe"
fi
if [[ -t 0 ]]
then
    echo "stdin is coming from the terminal"
fi
if [[ ! -t 0 && ! -p /dev/stdin ]]
then
    echo "stdin is redirected"
fi
read
echo "$REPLY"

示例运行:

$echo "hi" | ./demo
stdin is coming from a pipe
$./demo
[press ctrl-d]
stdin is coming from the terminal
$./demo < inputfile
stdin is redirected
$./demo <<< hello
stdin is redirected
$./demo <<EOF
goodbye
EOF
stdin is redirected

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读