当前位置: 首页 > 面试题库 >

检测命令是否通过管道传输

步浩壤
2023-03-14
问题内容

有没有一种方法可以检测go中的命令是否通过管道传输?

例:

cat test.txt | mygocommand #Piped, this is how it should be used
mygocommand # Not piped, this should be blocked

我正在从Stdin阅读reader := bufio.NewReader(os.Stdin)


问题答案:

您可以使用进行此操作os.Stdin.Stat()

package main

import (
  "fmt"
  "os"
)

func main() {
    fi, _ := os.Stdin.Stat()

    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}

(改编自https://www.socketloop.com/tutorials/golang-check-if-os-stdin-input-data-
is-piped-or-from-terminal



 类似资料:
  • 问题内容: 在Node中使用CommonJS模块时,可以使用来检测命令行是否正在运行脚本。 当在Node中使用ES模块(带有标志)时,有什么等效的方法可以检测是否从命令行运行脚本? 问题答案: 目前还没有-(仍在试验中!)。尽管普遍的看法是,无论如何,这种检查都是不好的做法,您应该只为库和可执行文件提供单独的脚本,但是有一个想法是为此提供一个布尔属性。

  • 问题内容: 如何检测是否使用SH:或JS:调用了Node.JS文件? 问题答案: if (require.main === module) { console.log(‘called directly’); } else { console.log(‘required as a module’); } 请在此处查看有关此文档的文档:https : //nodejs.org/docs/latest/

  • 问题内容: 我的问题与此相似:如何检测我的shell脚本是否正在通过管道运行?。区别在于我正在使用的Shell脚本是用Node.js编写的。 假设我输入: 然后,我怎么能得到的价值的? 我已经阅读了Unix和Node:管道和流,但这似乎只能提供异步解决方案(除非我误会了)。我正在寻找一个同步解决方案。同样,通过这种技术,检测脚本是否正在通过管道传输似乎不是很简单。 TL; DR我的问题有两个方面:

  • 问题内容: 前往游览的频道示例如下:https : //tour.golang.org/concurrency/2 通道c在求和函数中被修改,并且该函数终止后更改仍然存在。显然,c是通过引用传递的,但是没有创建指向c的指针。是否在go中通过引用隐式传递了通道? 问题答案: 从技术上讲,它们是被复制的,因为当您使用时 ,您是在堆上分配内容,因此从技术上讲,它是幕后的指针。但是指针类型没有公开,因此可

  • 问题内容: 我对Redis还是很陌生,仍然在玩它。我想测试一下它是否与我的项目相关,但是我不确定正在运行的特定命令。SO的用户让我确信使用管道和事务的性能优势,所以我想问一下如何做到这一点。 基本上,我有两个要发布的语句,而不必等待结果(似乎是管道衬砌的一个很好的候选者。它看起来像这样: 它非常简单,但是到目前为止,我一直在研究它的所有方式似乎都在等待ValueX是否存在的响应,并且由于我正在执行

  • 我知道可以通过根据构建类型提供不同的参数,例如: 然后我就可以访问源代码中的这些字段,如下所示:。但我需要的不是在gradle文件中硬编码这些值,而是在构建时通过命令提供它们。 这方面的用例是自动化,特别是在CI管道上有不同的作业,可以用不同的参数组合构建apk,而不必为每个组合创建新的构建类型。 欢迎提出其他建议。