...
1 package sh
2
3 import (
4 "os"
5 "path/filepath"
6 )
7
8 func filetest(name string, modemask os.FileMode) (match bool, err error) {
9 fi, err := os.Stat(name)
10 if err != nil {
11 return
12 }
13 match = (fi.Mode() & modemask) == modemask
14 return
15 }
16
17 func (s *Session) Getwd() string {
18 dir := string(s.dir)
19 if dir == "" {
20 dir, _ = os.Getwd()
21 }
22 return dir
23 }
24
25 func (s *Session) abspath(name string) string {
26 if filepath.IsAbs(name) {
27 return name
28 }
29 return filepath.Join(s.Getwd(), name)
30 }
31
32 func init() {
33
34 }
35
36
37 func (s *Session) Test(expression string, argument string) bool {
38 var err error
39 var fi os.FileInfo
40 fi, err = os.Lstat(s.abspath(argument))
41 switch expression {
42 case "d", "dir":
43 return err == nil && fi.IsDir()
44 case "f", "file":
45 return err == nil && fi.Mode().IsRegular()
46 case "x", "executable":
47
53 return err == nil && fi.Mode()&os.FileMode(0100) != 0
54 case "L", "link":
55 return err == nil && fi.Mode()&os.ModeSymlink != 0
56 }
57 return false
58 }
59
60
61 func Test(exp string, arg string) bool {
62 s := NewSession()
63 return s.Test(exp, arg)
64 }
65
View as plain text