Bagaimana cara unalias minus?

83

Kopi pagi saya belum mencapai otak saya ketika saya lupa tanda kutip di:

alias grep="grep --color=always"

jadi alih-alih saya mengetik:

alias grep=grep --color=always

tinggalkan aku dengan:

--color=always
grep=grep

di alias saya.

Ketika saya mencoba untuk membersihkan --color = selalu menggunakan unalias --colorsaya dapatkan:

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

Saya mencoba melarikan diri, mengutip, dan mengemis, tetapi saya tidak tahu bagaimana cara membuat komando unalias membersihkan kekacauan.

(Saya tahu restart akan melakukan trik tetapi pasti harus ada cara lain)

Meminta kembali
sumber
13
Ha ha, sekarang saya terjebak di tambang juga, mengerjakannya EDIT: Sepertinya jawaban choroba bekerja untuk saya
asmith
9
Agak mengingatkan saya pada yang lama echo > \\?\c:\windows\x., atau saat itu saya rm -rf * ~kebetulan.
Jason C

Jawaban:

127

Anda dapat menghindari sistem yang sesuai dengan POSIX yang menafsirkan tanda hubung dalam perintah dengan menambahkan --sebelum argumen apa pun.

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

Ini juga berfungsi dengan utilitas lain, katakanlah Anda memiliki file bernama -bla. Jika Anda mencoba menghapusnya dengan rmAnda akan mendapatkan kesalahan berikut:

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.

Dengan menggunakan --sebelum nama file, Anda akan menghapus file:

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory
mtak
sumber
19
Meskipun perlu dicatat bahwa untuk file, metode yang sama validnya adalah menggunakan path ke file yang menghindari ini; sehingga Anda dapat menggunakan ls ./-bladan rm ./-bla(atau menentukan jalur lengkap, apa pun yang lebih mudah dalam kasus Anda). Jelas ini tidak bekerja untuk alias!
Muzer
93

Cukup gunakan trik yang sama yang Anda gunakan untuk mengatur alias

unalias whatever --color
choroba
sumber
9
bekerja dengan benar, +1 tetapi solusi lainnya sedikit lebih bersih :)
Requist
1
Memang, tentu saja :-)
choroba
unalias unalias --color
Cœur
3

Solusi cepat

Untuk memperbaiki kedua alias yang salah, Anda cukup menjalankannya

unalias grep --color


Memahami apa yang terjadi

Anda memberi perintah yang salah alias grep=grep --color=alwaystanpa "...".

  • Anda menetapkan dua alias --color dan grep; memang Anda dapat membacanya di sisi kiri output Anda (semua di sebelah kiri =adalah perintah alias):

    --color=always
    grep=grep

    jadi Anda harus menghapus keduanya.

  • Kenapa ini terjadi?
    The ...dalam sinoptik alias berarti bahwa mungkin untuk melakukan banyak penugasan dalam satu baris:

    alias: alias [-p] [nama [= nilai] ...]

    Dalam hasil help aliasAnda dapat membaca sinoptik tetapi dari man bashAnda dapat membaca yang mungkin di baris yang sama bahkan untuk daftar dan menetapkan pada saat yang sama:

    Ketika argumen diberikan, alias didefinisikan untuk setiap nama yang nilainya diberikan. Nilai spasi tambahan menyebabkan kata berikutnya diperiksa untuk substitusi alias ketika alias diperluas. Untuk setiap nama dalam daftar argumen yang tidak diberi nilai, nama dan nilai alias dicetak ...

  • Anda memiliki masalah untuk membatalkan yang pertama --colorsaja .
    Ini karena itu ditafsirkan sebagai pilihan untuk aliasoleh shell Anda; untuk menghindari ini, Anda perlu berkomunikasi dengan bashshell Anda bahwa apa yang mengikutinya bukan pilihan.

  • The Holy Grail dari Linux:man , dalam hal ini man bashyang merupakan peti penuh dengan harta berguna dalam situasi seperti ini.
    Anda dapat membaca dari man bash:

    - A - memberi sinyal akhir opsi dan menonaktifkan pemrosesan opsi lebih lanjut. Setiap argumen setelah - diperlakukan sebagai nama file dan argumen . Argumen - setara dengan -.

    Seperti yang dilaporkan dalam jawaban lain cara POSIX adalah dengan menggunakan kombinasi karakter khusus --.

    unalias -- --color
  • Tapi mengapa unalias grep --colorini berhasil? Maksud saya tanpa menggunakan --?
    Ketika itu berhasil aliasbahkan untuk unaliasmemungkinkan untuk memberikan lebih dari satu nama dalam satu waktu (sekali lagi [...]).

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

    Saya hanya bisa memberikan dugaan saya: kebiasaan pemrograman yang baik adalah menulis rutinitas membaca dan menulis pada saat yang sama, di bawah logika yang sama. Jadi itu harus untuk rutinitas parsing opsi aliasdan unalias.

    Agar ini berfungsi, Anda dapat melihat bahkan dari perintah ini (dari shell yang dibuka untuk tujuan ini) yang tidak akan menghapus semua alias Anda:

    unalias whatever -a

Komentar terakhir

Di bagian BUGS di man bashantara beberapa hal yang dilaporkan, Anda dapat membaca:-)

Alias ​​membingungkan dalam beberapa penggunaan.

Cepat
sumber