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
Lepaskan: 2024-12-08 09:27:12
asal
367 orang telah melayarinya

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...)
Salin selepas log masuk
  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")
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan