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

DDD
Lepaskan: 2024-11-01 02:32:02
asal
484 orang telah melayarinya

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

Windows menukar ini kepada:

find /SomeText"
Salin selepas log masuk

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!