Rumah >pembangunan bahagian belakang >Golang >Mengapakah `exec` dengan hujah petikan dua kali menyebabkan tingkah laku yang tidak dijangka pada Windows?

Mengapakah `exec` dengan hujah petikan dua kali menyebabkan tingkah laku yang tidak dijangka pada Windows?

DDD
DDDasal
2024-11-01 02:32:02572semak imbas

Why does `exec` with double-quoted arguments cause unexpected behavior on Windows?

"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!

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