Làm thế nào để unalias một điểm trừ?


83

Cà phê buổi sáng của tôi chưa đến não tôi khi tôi quên các trích dẫn trong:

alias grep="grep --color=always"

vì vậy thay vì tôi gõ:

alias grep=grep --color=always

để lại cho tôi với:

--color=always
grep=grep

trong bí danh của tôi.

Khi tôi cố gắng dọn dẹp --color = luôn sử dụng, unalias --colortôi nhận được:

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

Tôi đã cố gắng trốn thoát, trích dẫn và cầu xin, nhưng tôi không thể tìm ra cách làm cho biệt đội unalias dọn dẹp mớ hỗn độn.

(Tôi biết khởi động lại sẽ thực hiện thủ thuật nhưng chắc chắn phải có cách khác)


13
Ha ha, bây giờ tôi cũng bị kẹt trong đó, làm việc với nó EDIT: Có vẻ như câu trả lời của choroba đã làm việc cho tôi
asmith

9
Kiểu như nhắc tôi nhớ về chuyện cũ echo > \\?\c:\windows\x., hay lần đó tôi rm -rf * ~vô tình.
Jason C

Câu trả lời:


127

Bạn có thể tránh các hệ thống tuân thủ POSIX diễn giải các dấu gạch ngang trong các lệnh bằng cách thêm --trước bất kỳ đối số nào.

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:~$

Điều này cũng hoạt động với các tiện ích khác, giả sử bạn có một tệp có tên -bla. Nếu bạn cố gắng loại bỏ nó với rmbạn sẽ nhận được lỗi sau:

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.

Bằng cách sử dụng --trước tên tệp, bạn sẽ xóa tệp:

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

19
Mặc dù đáng lưu ý rằng đối với các tệp, một phương pháp hợp lệ tương đương là sử dụng đường dẫn đến tệp tránh điều này; để bạn có thể sử dụng ls ./-blarm ./-bla(hoặc chỉ định các đường dẫn đầy đủ, bất cứ điều gì dễ dàng hơn trong trường hợp của bạn). Rõ ràng điều này không làm việc cho bí danh mặc dù!
Muzer


93

Chỉ cần sử dụng cùng một mẹo bạn đã sử dụng để đặt bí danh

unalias whatever --color

9
thực sự hoạt động, +1 nhưng giải pháp khác sạch hơn một chút :)
Yêu cầu

1
Thật vậy, tất nhiên :-)
choroba

unalias unalias --color
Cœur

3

Giải pháp nhanh

Để sửa cả các bí danh sai, bạn chỉ cần chạy

unalias grep --color


Hiểu những gì đã xảy ra

Bạn đưa ra lệnh sai alias grep=grep --color=alwaysmà không có "...".

  • Bạn đặt hai bí danh --colorgrep; thực sự bạn có thể đọc nó ở bên trái đầu ra của bạn (tất cả ở bên trái của lệnh =là bí danh):

    --color=always
    grep=grep

    vì vậy bạn cần bỏ đặt cả hai.

  • Tại sao điều này xảy ra?
    Từ ...đồng nghĩa của bí danh có nghĩa là có thể thực hiện nhiều phép gán trong một dòng:

    bí danh: bí danh [-p] [name [= value] ...]

    Trong đầu ra của help aliasbạn có thể đọc từ đồng nghĩa nhưng từ man bashbạn có thể đọc có thể trong cùng một dòng thậm chí để liệt kê và gán cùng một lúc:

    Khi các đối số được cung cấp, một bí danh được xác định cho mỗi tên có giá trị được đưa ra. Một dấu cách trong giá trị làm cho từ tiếp theo được kiểm tra để thay thế bí danh khi bí danh được mở rộng. Đối với mỗi tên trong danh sách đối số không có giá trị nào được cung cấp, tên và giá trị của bí danh sẽ được in ...

  • Bạn có vấn đề để bỏ đặt cái đầu tiên một --colormình .
    Điều này bởi vì nó được hiểu là các tùy chọn cho aliasvỏ của bạn; để tránh điều này, bạn cần liên lạc với trình bashbao của mình rằng những gì đang theo sau nó không phải là một tùy chọn.

  • Các Holy Grail của Linux:man trong trường hợp này man bashđó là một rương chứa đầy kho báu hữu ích trong tình huống như thế này.
    Bạn có thể đọc từ man bash:

    - A - báo hiệu kết thúc các tùy chọn và vô hiệu hóa xử lý tùy chọn tiếp theo. Bất kỳ đối số nào sau - được coi là tên tệp và đối số . Một đối số của - tương đương với -.

    Như đã báo cáo trong câu trả lời khác, cách POSIX là sử dụng kết hợp ký tự đặc biệt --.

    unalias -- --color
  • Nhưng tại sao lại unalias grep --colorlàm việc? Ý tôi là không dùng --?
    Vì nó hoạt động aliasngay cả đối với unaliasnó có thể cung cấp nhiều hơn một tên trong một lần (một lần nữa [...]).

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

    Tôi chỉ có thể đưa ra dự đoán của mình: một thói quen lập trình tốt là viết các thói quen đọc và viết cùng một lúc, bên dưới cùng một logic. Vì vậy, nó phải dành cho các thói quen phân tích cú pháp tùy chọn aliasunalias.

    Rằng điều này hoạt động mà bạn có thể thấy ngay cả từ lệnh này (từ một shell được mở cho mục đích này) sẽ không xóa tất cả các bí danh của bạn:

    unalias whatever -a

Nhận xét cuối cùng

Trong phần BUGS man bashtrong số một vài điều được báo cáo bạn có thể đọc:-)

Bí danh là khó hiểu trong một số sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.