วิธีการทุบตีเพื่อหยุดการหลบหลีก


38

ฉันมีสิ่งนี้ในบรรทัดคำสั่ง:

ln -sf $PWD/wine-

แล้วฉันก็กดปุ่มTabเพื่อเติมชื่อไฟล์ให้เสร็จ ใน Ubuntu รุ่นก่อนหน้านี้ใช้งานได้ดีเพื่อทำให้wine-ชื่อไฟล์เสร็จสมบูรณ์(และผลข้างเคียง$PWDจะขยายในเวลานั้น) แต่ตอนนี้มันกลับกลายเป็น

ln -sf \$PWD/wine-

$ซึ่งไม่ได้เป็นสิ่งที่ฉันหมายที่ทุกคนและไม่ได้อะไรที่สมบูรณ์เป็นไฟล์ไม่เริ่มต้นด้วยตัวอักษร

ฉันจะกลับไปสู่พฤติกรรมที่เสียน้อยลงได้อย่างไร

set บอกฉันเหล่านี้เป็นการตั้งค่าปัจจุบันของฉัน:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

2
หากคุณได้รับผลกระทบจากข้อผิดพลาดนี้โปรดพิจารณาการลงคะแนนภายใต้ URL ต่อไปนี้ (ต้องเข้าสู่ระบบ): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/…
cripton

คำตอบ:


36

ฉันพบว่าbash เวอร์ชั่น> = 4.2.29มีการdirexpandตั้งค่า shopt ใหม่ (ดูman docs/bash.1ว่าคุณตรวจสอบ bash ใหม่หรือดูbash.1 จากบรรทัด 8951 )

หากมีใครใช้ Quantal Quetzal 12.10 หรือได้รับ (หรือตรวจสอบและสร้าง) ทุบตีใหม่แล้ว:

shopt -s direxpand

ให้พฤติกรรมที่ฉันต้องการความต้องการและความรัก

วิธีแก้ปัญหา: ในขณะเดียวกันCtrl+ Alt+ Eแทนที่จะTabทำสิ่งที่ฉันต้องการด้วย แต่อึดอัดใจ

BTW มีหลายหัวข้อที่เรียกว่า "คำถามการขยายตัวแปรแท็บ bash หรือไม่" ในgnu.bash.bug จากการอ่านพวกเขาพบข้อมูลที่นี่


2
เวอร์ชั่นของ bash with direxpand กำลังจะเข้าสู่ Precise (12.04): ดูbugs.launchpad.net/bugs/778627
keturn

7
จะดียิ่งขึ้นถ้าฉันไม่ได้ขยายเส้นทางขนาดใหญ่ของฉันและสามารถใช้ตัวแปรที่ไม่ได้รับการยกเว้นต่อไปได้ด้วยความสมบูรณ์
jozxyqk

@jozxyqk คุณเคยพบวิธีที่จะได้รับคุณลักษณะที่ไม่มีเส้นทางการขยายตัวหรือไม่?
Ungeheuer

@ Ungeheuer ฉันใช้ทุบตี4.4.19บน Ubuntu 18.04 และใช้งานได้ ไม่แน่ใจว่าเมื่อสิ่งนี้เปลี่ยนแปลง
jozxyqk

2

ค้นหา_filedir()ในสคริปต์ bash_completion ระดับบนสุดและเปลี่ยนบรรทัด

compopt -o filenames 2>/dev/null

ไปยัง

compopt -o filenames -o noquote 2>/dev/null

ใน 12.04 GNU ทุบตี, รุ่น 4.2.25 ข้อเสนอแนะนี้จะช่วยให้ข้อผิดพลาด:compopt: noquote: invalid option name
arielf

1

สำหรับผู้ที่ (เช่นฉัน) ที่มี 12.04 สามารถใช้ ~ + แทน $ PWD ...

ตัวอย่างเช่น :

cd /bin
echo ~+/ls
/bin/ls

1

แม้จะมีทุบตีที่อัพเดท$แล้ว

  • การลบbash-completion (1:2.1-3.fc20)แพ็คเกจ
  • หรือเพียงแค่ไม่จัดหา/etc/bashrcจาก~/.bashrcดูเหมือนจะแก้ไข

ฉันสงสัยว่าตอนนี้ฉันจะพลาดคุณสมบัติบางอย่างที่ฉันคุ้นเคย แต่ยังไม่เคยสังเกตเห็น


ทางเลือก (อย่างน้อยสำหรับ Fedora 26), เพิ่มก่อนที่จะจัดหาexport BASH_COMPLETION_VERSINFO=0 /etc/bashrcสิ่งนี้ทำให้สคริปต์ที่มีปัญหาคิดว่ามีแหล่งที่มาแล้ว



0

การปิดใช้งานตัวเลือกเชลล์ 'complete_fullquote' ทำงานได้:

shopt -u complete_fullquote

$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: ชื่อตัวเลือกเชลล์ที่ไม่ถูกต้อง
Anton Gorev

0
shopt -u progcomp

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.