Score:1

ข้อผิดพลาดชื่อตัวแปรไม่ถูกต้องใน WSL

ธง in

มีการถามคำถามที่คล้ายกันโดยไม่มีคำตอบที่น่าพอใจ ฉันติดตั้ง kaldi บน WSL และเมื่อเรียกใช้สคริปต์ ฉันได้รับข้อผิดพลาดนี้ ซึ่งเห็นได้ชัดว่าเกี่ยวข้องกับ "ไฟล์โปรแกรม"

sh: 1: ส่งออก: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/ c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program: ชื่อตัวแปรไม่ถูกต้อง

หนึ่งในคำตอบคือการสร้างลิงก์ "โปรแกรม" ไปยัง "ไฟล์โปรแกรม" แต่มันล้มเหลว: /mnt/c$ sudo ln -s /mnt/c/โปรแกรม"ไฟล์โปรแกรม" ln: ไม่สามารถสร้างลิงค์สัญลักษณ์ 'โปรแกรม' การทำลิงค์ที่ฝั่ง windows สำเร็จ แต่ไม่มีผล

user535733 avatar
cn flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [เหตุใดฉันจึงได้รับข้อผิดพลาดนี้เมื่อพยายามใช้สคริปต์ทุบตีอย่างง่าย](https://askubuntu.com/questions/506415/why-i-obtain-this-error-when-i-try-to-perform- สคริปต์ทุบตีแบบง่ายนี้)
NotTheDr01ds avatar
vn flag
@ user535733 สิ่งนี้ดูไม่ซ้ำกับคำถามนั้น *เลย*
muru avatar
us flag
@NotTheDr01ds แน่ใจนะ? นอกเหนือจากเส้นทางจริงที่ใช้แล้ว ข้อผิดพลาดนี้ค่อนข้างซ้ำซ้อนกันที่นั่น
NotTheDr01ds avatar
vn flag
@muru ฉันคิดอย่างจริงจังเกี่ยวกับการเปลี่ยนโปรไฟล์ของฉันเพื่ออ่านว่า "ฉันใช้ Linux นานกว่า muru 4 เท่า แต่ muru รู้มากกว่าฉันถึง 4 เท่า" (เช่น Muru คุณร็อค!) แต่ฉันค่อนข้างแน่ใจในกรณีนี้ว่าคำถามที่เชื่อมโยงนั้นคล้ายกันโดยมีข้อผิดพลาดเท่านั้น อันนั้นเกิดจากการใช้คำสั่ง `export` ที่ไม่ดีอย่างเห็นได้ชัด ฉันอาจคิดผิด แต่ฉันค่อนข้างแน่ใจว่านี่เป็นปัญหาการอ้างถึงตัวแปรที่ทำให้ `export` ล้มเหลว ฉันแน่ใจว่าเราสามารถค้นหาคำถามอื่นที่อาจเป็นผู้สมัครที่ "ซ้ำกัน" ได้ดีกว่า แต่แง่มุมของ WSL ก็ทำให้คำถามนี้ "พิเศษ" มากขึ้นอีกเล็กน้อย
NotTheDr01ds avatar
vn flag
ดูเหมือนจะซ้ำกันเกือบทุกประการกับ [อันนี้](https://askubuntu.com/q/1215961/1165986) แต่ก็ไม่มีคำตอบที่ดีสำหรับอันนั้นเช่นกัน เนื่องจาก OP นั้นละทิ้ง WSL สำหรับ Ubuntu ที่ "บริสุทธิ์" ฉันไม่เห็นพวกเขายอมรับคำตอบเลย (พวกเขาพูดอย่างนั้นในความคิดเห็น) ด้วยเหตุผลดังกล่าว ผมขอเสนอให้เราปิดคำถามก่อนหน้านี้แทนคำถามนี้ (หรือค้นหาคำถามอื่นที่ซ้ำกัน) ไม่ใช่เรื่องปกติ แต่ฉันเคยเห็นกรณีในเว็บไซต์ Stack ที่ทำด้วยเหตุผลเช่นนี้
Greenonline avatar
us flag
โปรด [แก้ไข] และระบุลิงก์ไปยัง 'คำถามที่คล้ายกัน' ที่คุณอ้างถึงในคำถามของคุณ
Score:1
ธง vn

ฉันสังหรณ์ว่าเกิดจากบางสิ่งในสคริปต์หรือไฟล์เริ่มต้นของคุณ (สมมติว่า ~/.bashrc หรือ ~/.profile) อ้างอิงไม่ถูกต้อง เส้นทาง ตัวแปร. เนื่องจาก WSL ผนวกเส้นทาง Windows เข้ากับเส้นทาง WSL โดยอัตโนมัติ จึงเพิ่มองค์ประกอบเส้นทางบางอย่างด้วย "Program Files" ซึ่งถูกต้อง

แต่ต้องมีการอ้างอิงตัวแปรที่เหมาะสม ตรวจสอบสคริปต์ของคุณเพื่อใช้ $เส้นทาง และอ้างอิง (หรือเพิ่มบรรทัดที่อาจไม่เหมาะสมในคำถามของคุณหากคุณต้องการความช่วยเหลือ) หากคุณไม่เห็นสิ่งที่น่าสงสัยในสคริปต์ ให้ตรวจสอบของคุณด้วย ~/.bashrc และ ~/.profile.

แก้ไข/ปรับปรุง: ฉันค่อนข้างแน่ใจว่าบรรทัดที่ละเมิดจะอยู่ในสคริปต์ซึ่งกำลังดำเนินการอยู่ เส้นประ (เช่น. ). Bash สามารถจัดการสิ่งนี้ได้ดีโดยไม่ต้องอ้างเพิ่มเติม:

> ส่งออก PATH=$PATH:เส้นทางใหม่
> ก้อง $?
0
> echo $เส้นทาง
> # เอาต์พุต PATH ที่ถูกต้อง แม้จะมีช่องว่างในเส้นทาง Windows

อย่างไรก็ตามเรียกใช้ และลองแบบเดียวกัน:

$ ส่งออก PATH=$PATH:เส้นทางใหม่
sh: 1: ส่งออก: ไฟล์/NVIDIA: ชื่อตัวแปรไม่ถูกต้อง
$ ส่งออก PATH="$PATH":เส้นทางใหม่
$ก้อง$?
0
$echo $เส้นทาง
# เอาต์พุต PATH ที่ถูกต้อง แม้จะมีช่องว่างในเส้นทาง Windows

นอกจากนี้ยังมีโซลูชัน "bandaid" เพื่อปิดใช้งานคุณลักษณะ WSL ที่ผนวกเส้นทาง Windows เข้ากับเส้นทาง WSL/Linux คุณสามารถทำได้โดยการสร้าง (หรือแก้ไขหากมีอยู่แล้ว) /etc/wsl.conf และเพิ่มบรรทัดต่อไปนี้:

[การทำงานร่วมกัน]
ผนวก WindowsPath=เท็จ

จากนั้นหยุดอินสแตนซ์ด้วย wsl --terminate Ubuntu (สมมติว่าเป็นชื่อ distro เริ่มต้น) และรีสตาร์ท WSL

มันไม่ใช่ ดี วิธีแก้ปัญหาถาวร IMHO เนื่องจากทำให้เรียกใช้แอพ Windows (เช่น VSCode) ได้ยากขึ้นมากเมื่อไม่ได้อยู่ในเส้นทาง

ดีกว่าที่จะหาปัญหาหลักและแก้ไขในสคริปต์

NotTheDr01ds avatar
vn flag
@steeldriver ฉันคิดว่า แต่จากนั้นฉันก็คิดว่า PATH ที่ยุ่งเหยิงอาจยังคงเกิดขึ้นใน `~/.bashrc` จากนั้น เนื่องจากมันส่งออก สคริปต์ที่เป็นปัญหาจะถูกหยิบขึ้นมา (ซึ่งน่าจะทำงานภายใต้ `sh` เชบัง). ที่กล่าวว่า ยิ่งฉันคิดเกี่ยวกับมันมากเท่าไหร่ ฉันก็ยิ่งเชื่อว่าปัญหาการอ้างถึงอาจอยู่ในสคริปต์ที่เป็นปัญหา
NotTheDr01ds avatar
vn flag
@steeldriver ใช่ ฉันพูดถึงว่า Windows *ต่อท้าย* เส้นทาง Windows ในคำถาม แต่ยังมี *การเติม* บางอย่างเกิดขึ้นด้วยเหตุผลบางอย่าง - `/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222 0_x64__79rhkp1fndgsc` กำลังถูกต่อท้ายและนั่นผิดปกติใน WSL คุณพูดถูกว่าไม่ควรเป็น WSL ที่ทำส่วนนี้
NotTheDr01ds avatar
vn flag
@steeldriver ฉันเห็นความสับสน - คำพูดของฉันคลุมเครือเล็กน้อย เมื่อฉันพูดว่า "การเติมเส้นทาง Windows ไปยังแอป Ubuntu UWP จริง" ฉันหมายถึงเส้นทางของแอปนั้น (ไม่ใช่ "เส้นทาง Windows") แก้ไขเพื่อพยายามลบความคลุมเครือบางส่วน
NotTheDr01ds avatar
vn flag
@steeldriver อ๊ะ - ฉันคิดว่าเส้นทางแรกถูกเติม แต่ตอนนี้ฉันเห็นว่าข้อผิดพลาดทั้งหมดเป็นส่วนหนึ่งของเส้นทาง * ต่อท้าย * (รวมถึงเส้นทาง UWP) ฉันจะแก้ไขคำตอบเพื่อลบส่วนนั้นออก ขอบคุณ!
hr flag
ใช่ มันได้รับโทเค็นเป็น `export PATH=everything-up-to-first-whitespace everything-up-to-next-whitespace` ซึ่งเทียบเท่ากับ `export PATH=everything-up-to-first-whitespace` ตามด้วย `export ทุกอย่างขึ้นไปถัดไปช่องว่าง ' อีกวิธีหนึ่งคือทำให้แน่ใจว่า `$PATH` ถูกอ้างถึงใน RHS ของงานที่มอบหมาย
NotTheDr01ds avatar
vn flag
@steeldriver *"อีกวิธีหนึ่งคือเพื่อให้แน่ใจว่า $PATH ถูกอ้างถึงใน RHS ของการมอบหมาย"* นั่นเป็นวิธีแก้ปัญหาอย่างแน่นอน ฉันเชื่อ เพียงแต่ต้องค้นหาแนวรุกและแก้ไข ซึ่งจะขึ้นอยู่กับ OP ที่จะทำ
hr flag
BTW การสังเกตของคุณเกี่ยวกับ `sh` กับ 'bash' นั้นถูกต้อง - ดู [เมื่อใดที่จำเป็นต้องอ้างคำพูดสองครั้ง] (https://unix.stackexchange.com/a/68748/65304) โดยเฉพาะส่วนที่เกี่ยวกับ RHS ของงานที่มอบหมายใน **ซึ่งคุณสามารถละเว้นเครื่องหมายอัญประกาศคู่** *โปรดทราบว่าคุณต้องใส่เครื่องหมายอัญประกาศคู่หลัง `export` เนื่องจากเป็นคำสั่งในตัวธรรมดา ไม่ใช่คีย์เวิร์ด นี่เป็นจริงเฉพาะในบางเชลล์เช่น dash, zsh (ในการจำลอง sh), yash หรือ posh; bash และ ksh ทั้งคู่ปฏิบัติต่อการส่งออกเป็นพิเศษ*
Score:0
ธง aq

ฉันอาจจะเล่นเกมช้าไปหน่อย แต่โพสต์สิ่งนี้ไว้เผื่อมีใครเจอกระทู้นี้ ฉันประสบปัญหาเดียวกันนี้กับการติดตั้ง WSL ใหม่โดยใช้ Ubuntu และแก้ไขได้ด้วยการเรียกใช้คำสั่งเหล่านี้ (ในฐานะรูท) ใน WSL:

$ sudo apt อัปเดต && sudo apt อัปเกรด -y

สิ่งที่ฉันต้องทำคือรีสตาร์ทเทอร์มินัล WSL ของฉันหลังจากนี้ และปัญหาก็หายไป หวังว่านี่จะช่วยใครซักคน!

Score:-1
ธง in

พบคำตอบได้ใน https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 คุณต้องลบเส้นทาง windows ออกจาก $PATH และทำได้โดยสร้าง /etc/wsl.conf ด้วยข้อความต่อไปนี้: [การทำงานร่วมกัน] ผนวก WindowsPath=False จากนั้นปิดหน้าต่าง WSL รอ 8 วินาที แล้วเปิดใหม่

NotTheDr01ds avatar
vn flag
ใช่ ฉันได้กล่าวถึงการเป็นส่วนหนึ่งของปัญหาในย่อหน้าแรกของคำตอบของฉันเมื่อวานนี้ และให้ตัวเลือก `wsl.conf` เป็นวิธีแก้ปัญหา ดังนั้นคุณควรยอมรับคำตอบนั้น โปรดทราบว่าการลบพาธ Windows ออกจาก WSL จะลดการทำงานและประโยชน์ของมัน ดังนั้น ขอแนะนำให้คุณแก้ไขข้อผิดพลาดในการอ้างอิงในสคริปต์แทน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา