Heim > Backend-Entwicklung > Golang > Warum verhält sich „mv' mit Platzhaltern in Go und Bash unterschiedlich?

Warum verhält sich „mv' mit Platzhaltern in Go und Bash unterschiedlich?

Patricia Arquette
Freigeben: 2024-12-10 18:48:11
Original
915 Leute haben es durchsucht

Why Does `mv` with Wildcards Behave Differently in Go and Bash?

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")
Nach dem Login kopieren

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")
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage