github.com/rck/u-root@v0.0.0-20180106144920-7eb602e381bb/cmds/readlink/readlink.go (about) 1 // Copyright 2013-2017 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // readlink display value of symbolic link file. 6 // 7 // Synopsis: 8 // readlink [OPTIONS] FILE 9 // 10 // Options: 11 // -f: follow 12 // -v: verbose 13 // 14 package main 15 16 import ( 17 "flag" 18 "fmt" 19 "os" 20 "path/filepath" 21 ) 22 23 const cmd = "readlink [-fv] FILE" 24 25 var ( 26 follow = flag.Bool("f", false, "follow recursively") 27 verbose = flag.Bool("v", false, "report error messages") 28 ) 29 30 func init() { 31 defUsage := flag.Usage 32 flag.Usage = func() { 33 os.Args[0] = cmd 34 defUsage() 35 } 36 flag.Parse() 37 } 38 39 func readLink(file string) error { 40 path, err := os.Readlink(file) 41 if err != nil { 42 return err 43 } 44 45 if *follow { 46 path, err = filepath.EvalSymlinks(file) 47 } 48 49 fmt.Printf("%s\n", path) 50 return err 51 } 52 53 func main() { 54 var exitStatus int 55 56 for _, file := range flag.Args() { 57 if err := readLink(file); err != nil { 58 if *verbose { 59 fmt.Fprintf(os.Stderr, "%v\n", err) 60 } 61 exitStatus = 1 62 } 63 } 64 65 os.Exit(exitStatus) 66 }