Erweitern Sie die Tilde zum Home-Verzeichnis
Ich habe ein Programm, das akzeptiert ein Ziel-Ordner, in dem Dateien erstellt werden. Mein Programm sollte in der Lage sein zu handhaben, absolute Pfade, als auch relative Pfade. Mein problem ist, dass ich nicht weiß, wie erweitern ~
auf das home-Verzeichnis.
Meine Funktion zur Erweiterung der destination sieht wie folgt aus. Wenn der Pfad angegeben ist die absolute macht es nichts sonst verbindet es den relativen Pfad mit dem aktuellen Arbeitsverzeichnis.
import "path"
import "os"
//var destination *String is the user input
func expandPath() {
if path.IsAbs(*destination) {
return
}
cwd, err := os.Getwd()
checkError(err)
*destination = path.Join(cwd, *destination)
}
Seit Weg.Join
nicht erweitern ~
es funktioniert nicht, wenn der Benutzer geht so etwas wie ~/Downloads
als Ziel.
Wie soll ich dies lösen, in einen cross-Plattform-Weg?
InformationsquelleAutor der Frage lukad | 2013-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise die
~
wird erweitert durch die shell vor Ihr Programm sieht.Passen Sie, wie Sie Ihr Programm gewinnt seine Argumente aus der Kommandozeile in einer Weise, die kompatibel mit der shell-Erweiterung Mechanismus.
Eines der möglichen Probleme ist die Verwendung exec.Befehl wie diese:
welche nicht erweitert werden. Sie können zum Beispiel verwenden, stattdessen:
das erhalten der standard
~
expansion der shell.EDIT: behoben, durch das 'sh -c' Beispiel.
InformationsquelleAutor der Antwort zzzz
Gehen, bietet das Paket os/user, die es dir erlaubt, den aktuellen Benutzer und für alle Benutzer, die Ihr home-Verzeichnis:
Verwenden Sie dann Pfad/Dateipfad zu kombinieren, beide strings in einen gültigen Pfad:
(Beachten Sie, dass Benutzer.Current() ist nicht implementiert in den Spielplatz gehen (wahrscheinlich aus Sicherheitsgründen), so kann ich nicht geben eine leicht ausführbar Beispiel).
InformationsquelleAutor der Antwort joshlf
Im Allgemeinen die
~
erweitert wird, die von Ihrer shell vor es wird auf Ihrem Programm. Aber es gibt einige Einschränkungen.Im Allgemeinen ist schlecht beraten, es zu tun manuell Gehen.
Ich hatte das gleiche problem in einem Programm von mir und was ich verstanden habe ist, dass wenn ich die flag format als
--flag=~/myfile
ist es nicht ausgebaut. Aber wenn Sie laufen--flag ~/myfile
es wird ergänzt durch die shell (das=
fehlt und der Dateiname erscheint als eigenständige "Wort").InformationsquelleAutor der Antwort Anastasios Andronidis
Wenn Sie expandieren der tilde '~' ist für die Verwendung mit
exec.Command()
sollten Sie die Benutzer lokale shell für expansion.Aber beim laden von application-config-Dateien wie
~./myrc
diese Lösung ist nicht akzeptabel. Folgendes hat gut für mich gearbeitet, die über mehrere PlattformenHINWEIS:
usr.HomeDir
nicht respektieren$HOME
stattdessen ermittelt das home-Verzeichnis durch das Lesen der/etc/passwd
Datei über diegetpwuid_r
syscall (osx/linux). Unter windows verwendet es dieOpenCurrentProcessToken
Systemaufruf zum ermitteln der Benutzer-home-Verzeichnis.InformationsquelleAutor der Antwort Derrick J Wippler
Ich weiß, das ist eine alte Frage, aber es ist eine weitere option jetzt. Sie können go-homedir zu erweitern, die tidle des Benutzers Heimatverzeichnis:
InformationsquelleAutor der Antwort andreiashu