Dalam Go, pakej exec digunakan untuk melaksanakan arahan luaran. Apabila cuba menjalankan perintah 'mv' menggunakan kad bebas ('./source-dir/*'), ralat "status keluar 1" berlaku dengan output menyatakan "Tiada fail atau direktori sedemikian." Walau bagaimanapun, menjalankan perintah yang sama dalam terminal dengan kad bebas berjaya.
Tidak seperti dalam shell, di mana shell mentafsir kad bebas dan mengembangkannya ke dalam senarai padanan fail, pakej exec merawat kad bebas secara literal sebagai satu hujah. Ini bermakna arahan 'mv' melihat kad bebas ('*') dan bukannya senarai nama fail.
Untuk menggunakan kad bebas dalam Go, terdapat dua pendekatan:
import "path/filepath" files, err := filepath.Glob("./source-dir/*") if err != nil { // Handle error } cmd := exec.Command("mv", files...)
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
Untuk mengalihkan semua fail secara rekursif daripada direktori sumber ke direktori destinasi, anda perlu mengulangi secara rekursif melalui direktori sumber dan mengalihkan setiap fail atau direktori yang ditemui. Jika sumber mengandungi subdirektori, anda boleh sama ada mengalihkan setiap subdirektori secara rekursif atau menggunakan pakej seperti os yang menyediakan fungsi untuk memindahkan pokok.
Atas ialah kandungan terperinci Mengapa My Go `exec.Command` Gagal dengan Kad Liar Semasa Terminal Berjaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!