"exec with Double Quoted Argument" pada Windows: Menyingkap Enigma Melarikan Diri
Apabila cuba melaksanakan arahan find pada Windows menggunakan exec pakej, pengguna sering menghadapi isu yang tidak dijangka dengan melarikan diri. Masalah timbul apabila hujah yang dihantar kepada arahan dilampirkan dalam petikan berganda, yang menyebabkan Windows mentafsirnya secara salah.
Seperti kes yang disebutkan, apabila melaksanakan:
out, err := exec.Command("find", `"SomeText"`).Output()
Windows menukar ini kepada:
find /SomeText"
mengakibatkan ralat.
Menyingkap Punca: Windows' Quirky Escaping
Tingkah laku melarikan diri yang tidak tipikal dalam senario ini berpunca daripada fakta bahawa Windows menggunakan mekanisme melarikan diri yang berbeza daripada sistem pengendalian lain. Dalam Windows, petikan berganda digunakan sebagai aksara khas, dan apabila ditemui, ia cuba melarikan diri daripada aksara berikut. Oleh itu, dalam arahan yang diberikan, Windows mentafsirkan petikan berganda dalam hujah sebagai watak melarikan diri, menyebabkan tingkah laku yang tidak dijangka.
Menyelesaikan Teka-teki: Penyelesaian Terperinci
Menyelesaikan isu ini memerlukan penyelesaian dua bahagian. Pertama, baris arahan mesti ditetapkan secara eksplisit menggunakan medan SysProcAttr, memintas tingkah laku lalai. Kedua, rentetan baris arahan mesti dibina secara manual, memastikan pelarian yang betul.
Di bawah ialah coretan kod yang dikemas kini yang menggabungkan pelarasan ini:
<code class="go">package main import ( "fmt" "os/exec" "syscall" ) func main() { cmd := exec.Command(`find`) cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt` out, err := cmd.Output() fmt.Printf("%s\n", out) fmt.Printf("%v\n", err) }</code>
Dengan pengubahsuaian ini, arahan find akan menjadi dilaksanakan dengan betul pada Windows, membolehkan anda mencari fail seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapakah `exec` dengan hujah petikan dua kali menyebabkan tingkah laku yang tidak dijangka pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!