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-\*