Initial cat that parses file names from the command line
This commit is contained in:
parent
72c638432f
commit
50c84a2f7d
6
cat.go
Normal file
6
cat.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package jsh
|
||||||
|
|
||||||
|
type CatOutput struct {
|
||||||
|
Output string
|
||||||
|
Files []string
|
||||||
|
}
|
54
cat/main.go
Normal file
54
cat/main.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"jsh"
|
||||||
|
"io/ioutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func catFiles(queue chan *jsh.JshFrame) {
|
||||||
|
// Get all of the non-flags. The rest were processed by the main function
|
||||||
|
fileNames := flag.Args()
|
||||||
|
for _,fileName := range fileNames {
|
||||||
|
file, err := ioutil.ReadFile(fileName)
|
||||||
|
|
||||||
|
var jshFrame jsh.JshFrame
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
errText := make(map[string]string)
|
||||||
|
errText[fileName] = fmt.Sprintf("%s",err.Error())
|
||||||
|
jshFrame = jsh.JshFrame{"", errText}
|
||||||
|
queue <- &jshFrame
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
output := jsh.CatOutput{}
|
||||||
|
output.Files = []string{fileName}
|
||||||
|
output.Output = string(file)
|
||||||
|
jshFrame = jsh.JshFrame{output, ""}
|
||||||
|
queue <- &jshFrame
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runJsonMode() {
|
||||||
|
queue := make(chan *jsh.JshFrame)
|
||||||
|
done := make(chan bool)
|
||||||
|
go jsh.OutputFrames(queue, done)
|
||||||
|
catFiles(queue)
|
||||||
|
close(queue)
|
||||||
|
<-done
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// TODO: Support more flags
|
||||||
|
jsonModePtr := flag.Bool("json", false, "whether to use json mode for input and output")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
if !*jsonModePtr {
|
||||||
|
fmt.Printf("%s", jsh.FallbackWithArgs("/usr/bin/cat", flag.Args()))
|
||||||
|
} else {
|
||||||
|
runJsonMode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user