Rumah >pembangunan bahagian belakang >Golang >Mengapakah `mv` dengan Wildcards Berkelakuan Berbeza dalam Go dan Bash?
Melaksanakan Perintah mv Secara Berbeza dalam Go dan Bash
Dalam Go, menggunakan pakej exec untuk melaksanakan perintah mv boleh membawa kepada isu apabila menggunakan kad bebas seperti "*" dalam hujah arahan. Walaupun arahan berfungsi seperti yang diharapkan dalam terminal, kad bebas asterisk nampaknya tidak berfungsi dalam skrip Go.
Punca percanggahan ini terletak pada cara shell dan Go mengendalikan hujah arahan. Dalam terminal, shell mentafsir kad bebas dan menggantikannya dengan senarai nama fail yang sepadan. Walau bagaimanapun, dalam Go, arahan dihantar sebagai rentetan dan ia melihat kad bebas secara literal sebagai sebahagian daripada hujah.
Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:
Kembangkan Kad Liar Secara Manual
Anda boleh menggunakan fungsi failpath.Glob Go untuk mengambil senarai fail yang sepadan dengan corak kad bebas, dan kemudian hantar nama fail individu sebagai argumen kepada exec.Command. Contohnya:
files, err := filepath.Glob("./source-dir/*") if err != nil { // Error handling } cmd := exec.Command("mv", files, "./dest-dir")
Gunakan Shell Invocation
Anda boleh memanggil shell itu sendiri untuk melaksanakan perintah mv dengan kad bebas. Cangkang akan mentafsir kad bebas dan menyampaikan hujah yang diperluas kepada perintah mv. Contohnya:
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
Dengan menggunakan salah satu pendekatan ini, anda boleh memastikan bahawa kad bebas dikendalikan dengan betul dalam skrip Go anda, membolehkan anda melaksanakan perintah mv seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapakah `mv` dengan Wildcards Berkelakuan Berbeza dalam Go dan Bash?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!