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