Mv-Befehle in Go und Bash unterschiedlich ausführen
In Go kann die Verwendung des Exec-Pakets zum Ausführen des MV-Befehls zu Problemen bei der Verwendung führen Platzhalter wie „*“ in den Befehlsargumenten. Während der Befehl im Terminal wie erwartet funktioniert, scheint der Sternchen-Platzhalter im Go-Skript nicht zu funktionieren.
Der Grund für diese Diskrepanz liegt in der Art und Weise, wie Shell und Go Befehlsargumente verarbeiten. Im Terminal interpretiert die Shell den Platzhalter und ersetzt ihn durch eine Liste passender Dateinamen. In Go wird der Befehl jedoch als Zeichenfolge übergeben und der Platzhalter wird buchstäblich als Teil des Arguments betrachtet.
Um dieses Problem zu umgehen, haben Sie zwei Möglichkeiten:
Platzhalter manuell erweitern
Sie können die Funktion filepath.Glob von Go verwenden, um eine Liste von Dateien abzurufen, die dem Platzhaltermuster entsprechen, und dann übergeben die einzelnen Dateinamen als Argumente für exec.Command. Zum Beispiel:
files, err := filepath.Glob("./source-dir/*") if err != nil { // Error handling } cmd := exec.Command("mv", files, "./dest-dir")
Shell-Aufruf verwenden
Sie können die Shell selbst aufrufen, um den mv-Befehl mit den Platzhaltern auszuführen. Die Shell interpretiert die Platzhalter und übergibt die erweiterten Argumente an den Befehl mv. Zum Beispiel:
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
Durch die Verwendung eines dieser Ansätze können Sie sicherstellen, dass Platzhalter in Ihren Go-Skripten korrekt behandelt werden, sodass Sie mv-Befehle wie vorgesehen ausführen können.
Das obige ist der detaillierte Inhalt vonWarum verhält sich „mv' mit Platzhaltern in Go und Bash unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!