2016-08-27 3 views
0

Ich habe Macbook verwendet. Ich habe versucht, os.Chdir("/tmp") zu verwenden, aber das Ergebnis war /private/tmp. Im Anschluss ist mein Code:os.Chdir ("/ tmp") arbeitet abnormal in Go

package main 

import (
    "fmt" 
    "os" 
) 

func main() { 
    s, _ := os.Getwd() 
    fmt.Println(s) 

    if err := os.Chdir("/tmp"); err != nil { 
    panic(err) 
    } 
    s, _ = os.Getwd() 
    fmt.Println(s) 

} 

Und der Ausgang ist:

➜ test go run main.go 
/Users/willy/test 
/private/tmp 

Warum?

+8

Ist '/ tmp' ein symbolischer Link zu'/private/tmp'? Was sagt 'ls -ld/tmp'? –

+1

Dies beantwortet Ihre Frage nicht, aber wenn Sie versuchen, in das temporäre Standardverzeichnis zu wechseln, verwenden Sie 'os.TempDir()' anstatt das Verzeichnis selbst anzugeben. Dies wird über verschiedene Systeme und Konfigurationen hinweg portabler. –

Antwort

3

Als chown in diesem Apple thread

Unter OS X /tmp ist ein Alias ​​für /private/tmp.

$ ls -ale/| grep -i tmp 

[email protected] 1 root wheel  11 Aug 30 2009 tmp -> private/tmp 

$ 

Und ein golang syscall.Chdir() würde diesen Symlink folgen.
So wird der endgültige Pfad auf einer Mac OS-Plattform erwartet.