วิธีการลบ unalias?


83

กาแฟยามเช้าของฉันยังไม่ถึงสมอง แต่เมื่อฉันลืมคำพูดใน:

alias grep="grep --color=always"

ดังนั้นฉันพิมพ์แทน:

alias grep=grep --color=always

ทิ้งฉันไว้กับ:

--color=always
grep=grep

ในนามแฝงของฉัน

เมื่อฉันพยายามล้าง --color = ใช้unalias --colorฉันเสมอ:

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]

ฉันพยายามหลบหนีอ้างและขอทาน แต่ฉันไม่สามารถหาวิธีที่จะทำให้คอมมานโด unalias ล้างระเบียบ

(ฉันรู้ว่าการรีสตาร์ทจะทำเคล็ดลับ แต่แน่นอนต้องมีวิธีอื่น)


13
ฮ่าฮ่า, ตอนนี้ฉันติดอยู่ในใจของฉันแล้ว, แก้ไขให้ดีขึ้นแก้ไข: ดูเหมือนว่าคำตอบของ choroba เหมาะสำหรับฉัน
asmith

9
ชนิดของการเตือนฉันของเก่าecho > \\?\c:\windows\x.หรือเวลาที่ฉันrm -rf * ~โดยไม่ได้ตั้งใจ
Jason C

คำตอบ:


127

คุณสามารถหลีกเลี่ยงระบบที่สอดคล้องกับ POSIX การตีความเครื่องหมายขีดคั่นในคำสั่งโดยเพิ่ม--ก่อนอาร์กิวเมนต์ใด ๆ

mtak@frisbee:~$ alias grep=grep --color=always
mtak@frisbee:~$ alias | grep color
alias --color='always'

mtak@frisbee:~$ unalias -- --color
mtak@frisbee:~$ alias | grep color
mtak@frisbee:~$

นี้ยังทำงานร่วมกับสาธารณูปโภคอื่น ๆ -blaสมมติว่าคุณมีไฟล์ชื่อ หากคุณพยายามลบออกพร้อมกับrmคุณจะได้รับข้อผิดพลาดต่อไปนี้:

mtak@frisbee:~$ ls -- -bla
-bla
mtak@frisbee:~$ rm -bla
rm: invalid option -- 'b'
Try 'rm ./-bla' to remove the file '-bla'.
Try 'rm --help' for more information.

โดยใช้--ก่อนชื่อไฟล์คุณจะลบไฟล์:

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory

19
แม้ว่ามันจะคุ้มค่าที่จะสังเกตว่าสำหรับไฟล์วิธีการที่ถูกต้องเท่าเทียมกันคือการใช้พา ธ ไปยังไฟล์ที่หลีกเลี่ยงสิ่งนี้ เพื่อให้คุณสามารถใช้ls ./-blaและrm ./-bla(หรือระบุพา ธ เต็มไม่ว่าอะไรจะง่ายขึ้นในกรณีของคุณ) แน่นอนว่าสิ่งนี้ไม่ได้ผลสำหรับนามแฝง!
Muzer


93

เพียงใช้เคล็ดลับเดียวกับที่คุณใช้ตั้งชื่อแทน

unalias whatever --color

9
ทำงานแน่นอน +1 แต่การแก้ปัญหาอื่น ๆ ที่มีความสะอาดเป็นบิต :)
Requist

1
แน่นอน :-)
choroba

unalias unalias --color
Cœur

3

ทางออกที่รวดเร็ว

ในการแก้ไขทั้งนามแฝงที่ไม่ถูกต้องคุณอาจเรียกใช้

unalias grep --color


ทำความเข้าใจกับสิ่งที่เกิดขึ้น

คุณให้คำสั่งที่ไม่ถูกต้องโดยไม่ต้องalias grep=grep --color=always"..."

  • คุณตั้งชื่อแทนสอง --colorและgrep; แน่นอนคุณสามารถอ่านได้ที่ด้านซ้ายของเอาต์พุตของคุณ (ทั้งหมดทางด้านซ้ายของ=คำสั่ง aliased):

    --color=always
    grep=grep

    ดังนั้นคุณต้องยกเลิกทั้งสองอย่าง

  • ทำไมสิ่งนี้เกิดขึ้น ในสรุปนามแฝงหมายความว่าเป็นไปได้ที่จะทำหลายนัดในหนึ่งบรรทัด:
    ...

    alias: alias [-p] [name [= value] ... ]]

    ในผลลัพธ์ของhelp aliasคุณสามารถอ่านสรุป แต่จากman bashคุณสามารถอ่านได้ว่าเป็นไปได้ในบรรทัดเดียวกันแม้จะแสดงรายการและกำหนดในเวลาเดียวกัน:

    เมื่อมีการระบุอาร์กิวเมนต์จะมีการกำหนดนามแฝงสำหรับแต่ละชื่อที่มีการกำหนดค่า ช่องว่างที่มีค่าต่อท้ายทำให้คำถัดไปถูกตรวจสอบเพื่อทดแทนสมนามเมื่อนามแฝงถูกขยาย สำหรับแต่ละชื่อในรายการอาร์กิวเมนต์ที่ไม่มีการระบุค่าชื่อและค่าของนามแฝงจะถูกพิมพ์ ...

  • คุณมีปัญหาที่จะล้างค่าคนแรก--colorคนเดียว
    สิ่งนี้เพราะมันถูกตีความว่าเป็นตัวเลือกสำหรับaliasเชลล์ของคุณ เพื่อหลีกเลี่ยงสิ่งนี้คุณต้องสื่อสารกับbashเชลล์ของคุณว่าสิ่งที่ตามมานั้นไม่ใช่ตัวเลือก

  • The Holy Grail of Linux:manในกรณีนี้man bashเป็นตู้เก็บของที่เต็มไปด้วยสมบัติที่มีประโยชน์ในสถานการณ์เช่นนี้
    คุณสามารถอ่านได้จากman bash:

    - A - สัญญาณการสิ้นสุดของตัวเลือกและปิดการใช้งานการประมวลผลตัวเลือกเพิ่มเติม ข้อโต้แย้งใด ๆ หลังจากที่ - จะถือว่าเป็นชื่อไฟล์และข้อโต้แย้ง อาร์กิวเมนต์ของ - เทียบเท่ากับ -

    ตามที่ได้รายงานในคำตอบอื่น ๆ วิธี POSIX --คือการใช้การรวมกันอักขระพิเศษ

    unalias -- --color
  • แต่ทำไมถึงunalias grep --colorทำงาน ผมหมายถึงโดยไม่ต้องใช้--?
    เพราะมันใช้งานaliasได้แม้unaliasจะเป็นไปได้ที่จะให้ชื่อมากกว่าหนึ่งชื่อในคราวเดียว (อีกครั้ง[...])

    unalias: unalias [-a] name [name ...]

    ฉันสามารถเดาได้เฉพาะนิสัยการเขียนโปรแกรมที่ดีคือการเขียนการอ่านและการเขียนตามปกติในเวลาเดียวกันภายใต้ตรรกะเดียวกัน ดังนั้นมันจะต้องมีสำหรับการปฏิบัติตัวเลือกการแยกวิเคราะห์และaliasunalias

    สิ่งนี้ใช้ได้ผลคุณสามารถดูได้จากคำสั่งนี้ (จากเชลล์ที่เปิดเพื่อจุดประสงค์นี้) ซึ่งจะไม่ลบนามแฝงทั้งหมดของคุณ:

    unalias whatever -a

คำพูดสุดท้าย

ในส่วน BUGS ของman bashบางสิ่งที่รายงานคุณอาจอ่าน:-)

นามแฝงกำลังสับสนในการใช้งานบางอย่าง

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