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 --color
saya 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)
bash
bash-alias
Meminta kembali
sumber
sumber
echo > \\?\c:\windows\x.
, atau saat itu sayarm -rf * ~
kebetulan.Jawaban:
Anda dapat menghindari sistem yang sesuai dengan POSIX yang menafsirkan tanda hubung dalam perintah dengan menambahkan
--
sebelum argumen apa pun.Ini juga berfungsi dengan utilitas lain, katakanlah Anda memiliki file bernama
-bla
. Jika Anda mencoba menghapusnya denganrm
Anda akan mendapatkan kesalahan berikut:Dengan menggunakan
--
sebelum nama file, Anda akan menghapus file:sumber
ls ./-bla
danrm ./-bla
(atau menentukan jalur lengkap, apa pun yang lebih mudah dalam kasus Anda). Jelas ini tidak bekerja untuk alias!Cukup gunakan trik yang sama yang Anda gunakan untuk mengatur alias
sumber
unalias unalias --color
Solusi cepat
Untuk memperbaiki kedua alias yang salah, Anda cukup menjalankannya
Memahami apa yang terjadi
Anda memberi perintah yang salah
alias grep=grep --color=always
tanpa"..."
.Anda menetapkan dua alias
--color
dangrep
; memang Anda dapat membacanya di sisi kiri output Anda (semua di sebelah kiri=
adalah perintah alias):jadi Anda harus menghapus keduanya.
Kenapa ini terjadi?
The
...
dalam sinoptik alias berarti bahwa mungkin untuk melakukan banyak penugasan dalam satu baris:Dalam hasil
help alias
Anda dapat membaca sinoptik tetapi dariman bash
Anda dapat membaca yang mungkin di baris yang sama bahkan untuk daftar dan menetapkan pada saat yang sama:Anda memiliki masalah untuk membatalkan yang pertama
--color
saja .Ini karena itu ditafsirkan sebagai pilihan untuk
alias
oleh shell Anda; untuk menghindari ini, Anda perlu berkomunikasi denganbash
shell Anda bahwa apa yang mengikutinya bukan pilihan.The Holy Grail dari Linux:
man
, dalam hal iniman bash
yang merupakan peti penuh dengan harta berguna dalam situasi seperti ini.Anda dapat membaca dari
man bash
:Seperti yang dilaporkan dalam jawaban lain cara POSIX adalah dengan menggunakan kombinasi karakter khusus
--
.Tapi mengapa
unalias grep --color
ini berhasil? Maksud saya tanpa menggunakan--
?Ketika itu berhasil
alias
bahkan untukunalias
memungkinkan untuk memberikan lebih dari satu nama dalam satu waktu (sekali lagi[...]
).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
alias
danunalias
.Agar ini berfungsi, Anda dapat melihat bahkan dari perintah ini (dari shell yang dibuka untuk tujuan ini) yang tidak akan menghapus semua alias Anda:
Komentar terakhir
Di bagian BUGS di
man bash
antara beberapa hal yang dilaporkan, Anda dapat membaca:-)
sumber