Rumah >pembangunan bahagian belakang >Golang >Mengapa My Go `exec.Command` Gagal dengan Kad Liar Semasa Terminal Berjaya?

Mengapa My Go `exec.Command` Gagal dengan Kad Liar Semasa Terminal Berjaya?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 09:27:12363semak imbas

Why Does My Go `exec.Command` Fail with Wildcards While the Terminal Succeeds?

Golang Exec Command Failure with Wildcards Walaupun Terminal Berjaya

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.

Mengapa Wildcard Gagal dalam Pergi

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.

Penyelesaian

Untuk menggunakan kad bebas dalam Go, terdapat dua pendekatan:

  1. Gunakan filepath.Glob(): Fungsi ini mengembalikan sekeping rentetan yang mengandungi senarai nama fail yang sepadan untuk corak yang diberikan. Anda kemudiannya boleh menggunakan senarai ini sebagai hujah kepada arahan 'mv'.
import "path/filepath"

files, err := filepath.Glob("./source-dir/*")
if err != nil {
    // Handle error
}

cmd := exec.Command("mv", files...)
  1. Invoke Shell: Anda boleh memanggil shell dan lulus arahan sebagai hujah, membenarkan shell mentafsir kad bebas dan mengembangkannya ke dalam senarai yang sesuai argumen.
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")

Pergerakan Fail Rekursif

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn