ฉันจะกู้คืนความสมบูรณ์ของแท็บในตัวแปรเชลล์ในบรรทัดคำสั่ง bash ได้อย่างไร


4

ฉันตั้งไดเรกทอรีที่เข้าเยี่ยมชมล่าสุดเป็นตัวแปรเชลล์ d1, d2 และอื่น ๆ มานาน

ในเครื่องโบราณของ Fedora ฉันสามารถพิมพ์คำสั่งได้

$ cp $ d1 /

และเชลล์จะแทนที่ $ d1 ด้วยข้อความเช่น / home / acctname / projects / blog / และจะ จากนั้นแสดงเนื้อหาของ ... / blog เช่นเดียวกับที่คุณคาดหวังว่าการทำแท็บจะเสร็จสมบูรณ์

ตอนนี้ทั้งอูบุนตู wheezy / sid และ fedora 16 เพียงแค่ \ -escape the '$' และโดยธรรมชาติ ไม่มีความสมบูรณ์ที่จะแสดง

คุณสามารถเห็นการทำงานนี้ในหน้าต่างเทอร์มินัล OSX ในวันที่ 10.8 ให้ทำอะไรสักอย่าง ชอบ

ls $ HOME / เพื่อดูว่าฉันหมายถึงอะไร

มีตัวแปร bash shell หรือตัวเลือกที่สามารถกู้คืนได้หรือไม่ พฤติกรรมเก่า ๆ

man bash แนะนำว่านี่เป็นข้อผิดพลาด:

   complete (TAB)
          Attempt  to  perform  completion  on  the  text  before  point.  Bash
          attempts completion treating the text as  a  variable  (if  the  text
          begins  with  $),  username (if the text begins with ~), hostname (if
          the text begins with @), or command (including aliases and functions)
          in  turn.   If none of these produces a match, filename completion is
          attempted.

ฉันได้รับการอธิบายที่สมบูรณ์ด้านบนเมื่อโทเค็นเริ่มต้นด้วย '~' หรือตัวอักษร มัน เพียงแค่ '$' - เสร็จสิ้นที่แตก

คำตอบ:


8

ในฐานะของทุบตี 4.2 พฤติกรรมนี้ถูกควบคุมโดย

shopt -s direxpand # enable
shopt -u direxpand # disable

ดู http://www.mail-archive.com/bug-bash@gnu.org/msg11251.html สำหรับข้อมูลพื้นหลัง


ฉันต้องการตรวจสอบสิ่งนี้จริงๆ แต่ฉันได้รับผลลัพธ์นี้: ericp @ pacer: แอพ $ shopt -s direxpand bash: shopt: direxpand: ชื่อตัวเลือกเชลล์ที่ไม่ถูกต้อง ericp @ pacer: client $ bash --version GNU bash รุ่น 4.2 24 (1) -release (x86_64-pc-linux-gnu) ericp @ pacer: client $ echo $ basHOPTS checkwinsize: cmdhist: expand_aliases: extglob: extquote: force_fignore: hist_firm .1 LTS
Eric

1
ฉันจะเพิ่มบรรทัดใหม่ในความคิดเห็น stackexchange ได้อย่างไร
Eric

@Eric - คุณทำไม่ได้ หากคุณมีสิ่งที่ต้องการการจัดรูปแบบที่เกี่ยวข้องกับคำถามของคุณให้เพิ่มลงในคำถามแทน
ghoti

0

ไม่แน่ใจว่าคุณกำลังขอวิธีแก้ไขปัญหาบน Mac หรือ * nix หากคุณกำลังถามเกี่ยวกับการเปลี่ยน Mac ของคุณฉันเพิ่งพบเจอสิ่งนี้ กวดวิชาที่เรียบง่าย เพื่ออัพเกรด OSX ทุบตีของฉันจาก

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

ไปยัง

GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin15.0.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ที่จริงแล้วมันทำงานได้ตามที่ฉันคาดหวังไว้ทั้งบน osx 10.1 และ Ubuntu 14.04 (jessie / sid): '$ d & lt; TAB & gt;' ขยาย vars ทั้งหมดที่ขึ้นต้นด้วย '$ d' และ '$ d1 / & lt; TAB & gt;' แสดงไฟล์ใน dir ที่อ้างอิงโดย '$ d1' ขอบคุณทุกคน
Eric
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.