파이프를 받아들이다

6462 단어 gocliunix
유닉스 파이프 연산자는 마술입니다.

standard-in에서 입력을 읽고 standard-out에 출력을 쓰도록 응용 프로그램을 작성하는 한 수천 개의 다른 도구로 cli 도구를 구성할 수 있습니다.

스캐너



한 번에 한 줄씩 읽으려면 bufio.NewScanner을 사용하는 것을 좋아합니다. 이것은 bufio.ScanLines을 사용하여 판독기를 새 줄로 분할합니다.

in := bufio.NewScanner(os.Stdin)
// Scan returns false when its out of lines
for in.Scan() {
  // line is a string
  line := in.Text()
  // if you want bytes in.Bytes() exists too
}


도구를 만들 수 있습니다



예를 들어 이미지의 URL을 읽고 터미널에 ascii 아트 이미지로 표시하기 위해 작성한 작은 명령줄 도구가 있습니다.

전체 소스https://gist.github.com/trashhalo/6154a690bd2612ae33c8252d8051eb9f

func main() {
    in := bufio.NewScanner(os.Stdin)
    for in.Scan() {
        line := in.Text()
        err := convertLineToArt(line)
        if err != nil
    }
}

func convertLineToArt(line string) error {
    fmt.Println(line)
    resp, err := http.Get(line)
    if err != nil {
    defer resp.Body.Close()

    img, _, err := image.Decode(resp.Body)

    convertOptions := convert.DefaultOptions
    convertOptions.FixedWidth = 50
    convertOptions.FixedHeight = 50
    converter := convert.NewImageConverter()
    for _, row := range converter.Image2ASCIIMatrix(img, &convertOptions) {
        fmt.Print(row)
    }
    return nil
}


파이프 사용



이제 몇 가지 도구를 결합해 보겠습니다.

curl -A "test" https://www.reddit.com/r/cats.json | jq -r '.data.children[] | .data.url'|go run .|less


이것은 다음과 같이 말합니다.

  • curl - 고양이에 대한 reddit 게시물용 json을 다운로드합니다. reddit이 curl 사용자 에이전트를 싫어하기 때문에 -A "테스트"를 변경해야 합니다.

  • jq -r 'xyz' - reddit json에서 이미지의 URL을 추출합니다.
  • 실행 - 명령을 실행하십시오!

  • less - 위아래로 스크롤할 수 있는 작은 뷰어에 출력을 넣습니다.

  • 좋은 웹페이지 즐겨찾기