@@ -226,6 +226,15 @@ func srcVals(data interface{}, limit int) ([]string, error) {
226
226
return nil , fmt .Errorf ("%T does not support for range" , data )
227
227
}
228
228
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
+
229
238
func init () {
230
239
// Standard Options
231
240
flag .BoolVar (& showHelp , "h" , false , "display help" )
@@ -244,6 +253,7 @@ func init() {
244
253
flag .StringVar (& delimiter , "delimiter" , "" , "set delimiter for range output" )
245
254
flag .IntVar (& limit , "limit" , 0 , "limit the number of items output" )
246
255
flag .BoolVar (& permissive , "permissive" , false , "suppress errors messages" )
256
+ flag .BoolVar (& permissive , "quiet" , false , "suppress errors messages" )
247
257
}
248
258
249
259
func main () {
@@ -274,15 +284,13 @@ func main() {
274
284
275
285
in , err := cli .Open (inputFName , os .Stdin )
276
286
if err != nil {
277
- fmt .Fprintf (os .Stderr , "%s\n " , err )
278
- os .Exit (1 )
287
+ handleError (err , 1 )
279
288
}
280
289
defer cli .CloseFile (inputFName , in )
281
290
282
291
out , err := cli .Create (outputFName , os .Stdout )
283
292
if err != nil {
284
- fmt .Fprintf (os .Stderr , "%s\n " , err )
285
- os .Exit (1 )
293
+ handleError (err , 1 )
286
294
}
287
295
defer cli .CloseFile (outputFName , out )
288
296
@@ -294,16 +302,11 @@ func main() {
294
302
// Read in the complete JSON data structure
295
303
buf , err := ioutil .ReadAll (in )
296
304
if err != nil {
297
- fmt .Fprintf (os .Stderr , "%s\n " , err )
298
- os .Exit (1 )
305
+ handleError (err , 1 )
299
306
}
300
307
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 )
307
310
}
308
311
309
312
var (
@@ -323,34 +326,31 @@ func main() {
323
326
data , err = dotpath .EvalJSON (p , buf )
324
327
}
325
328
if err != nil {
326
- fmt .Fprintf (os .Stderr , "%s\n " , err )
327
- os .Exit (1 )
329
+ handleError (err , 1 )
328
330
}
329
331
switch {
330
332
case showLength :
331
333
if l , err := getLength (data ); err == nil {
332
334
fmt .Fprintf (out , "%d" , l )
333
335
} else {
334
- fmt . Fprintf ( os . Stderr , "%s \n " , err )
336
+ handleError ( err , - 1 )
335
337
}
336
338
case showLast :
337
339
if l , err := getLength (data ); err == nil {
338
340
fmt .Fprintf (out , "%d" , l - 1 )
339
341
} else {
340
- fmt . Fprintf ( os . Stderr , "%s \n " , err )
342
+ handleError ( err , - 1 )
341
343
}
342
344
case showValues :
343
345
elems , err := srcVals (data , limit - 1 )
344
346
if err != nil {
345
- fmt .Fprintf (os .Stderr , "%s\n " , err )
346
- os .Exit (1 )
347
+ handleError (err , 1 )
347
348
}
348
349
fmt .Fprintln (out , strings .Join (elems , delimiter ))
349
350
default :
350
351
elems , err := srcKeys (data , limit - 1 )
351
352
if err != nil {
352
- fmt .Fprintf (os .Stderr , "%s\n " , err )
353
- os .Exit (1 )
353
+ handleError (err , 1 )
354
354
}
355
355
fmt .Fprintln (out , strings .Join (elems , delimiter ))
356
356
}
0 commit comments