@@ -226,6 +226,15 @@ func srcVals(data interface{}, limit int) ([]string, error) {
226226 return nil , fmt .Errorf ("%T does not support for range" , data )
227227}
228228
229+ func handleError (err error , exitCode int ) {
230+ if permissive == false {
231+ fmt .Fprintf (os .Stderr , "%s\n " , err )
232+ }
233+ if exitCode >= 0 {
234+ os .Exit (exitCode )
235+ }
236+ }
237+
229238func init () {
230239 // Standard Options
231240 flag .BoolVar (& showHelp , "h" , false , "display help" )
@@ -244,6 +253,7 @@ func init() {
244253 flag .StringVar (& delimiter , "delimiter" , "" , "set delimiter for range output" )
245254 flag .IntVar (& limit , "limit" , 0 , "limit the number of items output" )
246255 flag .BoolVar (& permissive , "permissive" , false , "suppress errors messages" )
256+ flag .BoolVar (& permissive , "quiet" , false , "suppress errors messages" )
247257}
248258
249259func main () {
@@ -274,15 +284,13 @@ func main() {
274284
275285 in , err := cli .Open (inputFName , os .Stdin )
276286 if err != nil {
277- fmt .Fprintf (os .Stderr , "%s\n " , err )
278- os .Exit (1 )
287+ handleError (err , 1 )
279288 }
280289 defer cli .CloseFile (inputFName , in )
281290
282291 out , err := cli .Create (outputFName , os .Stdout )
283292 if err != nil {
284- fmt .Fprintf (os .Stderr , "%s\n " , err )
285- os .Exit (1 )
293+ handleError (err , 1 )
286294 }
287295 defer cli .CloseFile (outputFName , out )
288296
@@ -294,16 +302,11 @@ func main() {
294302 // Read in the complete JSON data structure
295303 buf , err := ioutil .ReadAll (in )
296304 if err != nil {
297- fmt .Fprintf (os .Stderr , "%s\n " , err )
298- os .Exit (1 )
305+ handleError (err , 1 )
299306 }
300307
301- if len (buf ) == 0 && permissive == false {
302- fmt .Fprintln (os .Stderr , cfg .Usage ())
303- os .Exit (1 )
304- }
305- if len (buf ) == 0 && permissive == true {
306- os .Exit (0 )
308+ if len (buf ) == 0 {
309+ handleError (fmt .Errorf ("%s" , cfg .Usage ()), 1 )
307310 }
308311
309312 var (
@@ -323,34 +326,31 @@ func main() {
323326 data , err = dotpath .EvalJSON (p , buf )
324327 }
325328 if err != nil {
326- fmt .Fprintf (os .Stderr , "%s\n " , err )
327- os .Exit (1 )
329+ handleError (err , 1 )
328330 }
329331 switch {
330332 case showLength :
331333 if l , err := getLength (data ); err == nil {
332334 fmt .Fprintf (out , "%d" , l )
333335 } else {
334- fmt . Fprintf ( os . Stderr , "%s \n " , err )
336+ handleError ( err , - 1 )
335337 }
336338 case showLast :
337339 if l , err := getLength (data ); err == nil {
338340 fmt .Fprintf (out , "%d" , l - 1 )
339341 } else {
340- fmt . Fprintf ( os . Stderr , "%s \n " , err )
342+ handleError ( err , - 1 )
341343 }
342344 case showValues :
343345 elems , err := srcVals (data , limit - 1 )
344346 if err != nil {
345- fmt .Fprintf (os .Stderr , "%s\n " , err )
346- os .Exit (1 )
347+ handleError (err , 1 )
347348 }
348349 fmt .Fprintln (out , strings .Join (elems , delimiter ))
349350 default :
350351 elems , err := srcKeys (data , limit - 1 )
351352 if err != nil {
352- fmt .Fprintf (os .Stderr , "%s\n " , err )
353- os .Exit (1 )
353+ handleError (err , 1 )
354354 }
355355 fmt .Fprintln (out , strings .Join (elems , delimiter ))
356356 }
0 commit comments