ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
ใช้งานได้กับ Bash มีปัญหาอะไร ? :-D
ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
ใช้งานได้กับ Bash มีปัญหาอะไร ? :-D
คำตอบ:
ใช่zsh
และbash
ประพฤติแตกต่างกันในเรื่องนี้
ในzsh
เมื่อคุณพูด " ubuntuone-*
" มันจะดูในไดเรกทอรีการทำงานปัจจุบันของคุณสำหรับไฟล์ที่ขึ้นต้นด้วยubuntuone-
- เพราะมันไม่พบไฟล์ใด ๆ เลยมันจะระบุว่า " no matches
" และไม่ได้รันคำสั่ง
bash
ใช้วิธีการที่แตกต่างกัน - มันจะค้นหาไฟล์ที่เริ่มต้นด้วยubuntuone-
ในไดเรกทอรีการทำงานปัจจุบัน แต่ถ้ามันไม่พบสิ่งที่มันบอกกับตัวเอง "บางทีโปรแกรมที่ฉันเรียกใช้รู้วิธีจัดการกับตัวแทน" และผ่านไป " ubuntuone-*
"ปิดsudo apt-get
เป็นอาร์กิวเมนต์ตามตัวอักษร
หากคุณมีไฟล์ในไดเรกทอรีการทำงานปัจจุบันของคุณที่เรียกว่าubuntuone-ffdjhjer
ทุบตีจะพยายามดำเนินการsudo apt-get remove --purge ubuntuone-ffdjhjer
ซึ่งอาจจะล้มเหลว
ในzsh
(และในbash
) คุณสามารถใช้เครื่องหมายคำพูดเดี่ยวเพื่อบอกว่าไม่ให้ขยายไวด์การ์ด แต่เพื่อส่งต่อเช่นเดียวกับใน:
sudo apt-get remove --purge 'ubuntuone-*'
dpkg -l 'linux*'
ทุบตีเพื่อดูเมล็ดที่ติดตั้งทั้งหมด
คำตอบนี้อาจจะสายไปสักหน่อย แต่ก็มีวิธีแก้ไขนี้ จากบรรทัดคำสั่งรัน:
unsetopt no_match
shopt -s failglob
ในbash
การแก้ไข bash
จึงจะทำงานเหมือนzsh
และอื่น ๆ ที่ทันสมัยเช่นเปลือกหอยfish
หรือtcsh
ว่ามีการแก้ไขที่ misfeature ของบอร์นเชลล์โดยคำสั่งอาจจะยังคงทำงานแม้ว่า globs ไม่ตรงกับ
มีอีกวิธีหนึ่งในการป้องกันการขยายใน zsh ซึ่งฉันชอบมากกว่าราคาคือ:
sudo apt-get remove --purge ubuntuone-\*