Bisakah saya membuat bash stop mem-parsing dan memvalidasi alias tertentu?

8

Saya menggunakan Fedora 25, dan telah menambahkan alias berikut ke profil bash saya:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

(Saya tidak dapat menggunakan straight-up dnf updateinfo infokarena https://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

Alias ​​saya berfungsi, tetapi perintah tersebut membutuhkan waktu sekitar 10 detik untuk dijalankan, dan karena bash mem-parsing dan memvalidasi semua alias ketika profil bersumber, membuat shell baru menghasilkan hang 10 detik. Ini menyebalkan.

Apakah ada cara untuk membuat bash tidak mencoba mengurai dan memvalidasi alias - atau hanya itu?

iLikeDirt
sumber

Jawaban:

9

Tebakan terbaik saya adalah Anda mungkin harus menggunakan tanda kutip tunggal di sekitar definisi alias.

Saya tahu bahwa ketika menggunakan tanda kutip ganda, variabel shell diganti dengan konten mereka pada tahap definisi alias (seperti yang Anda katakan parsing dan memvalidasi) dan backticks atau substitusi shell seperti $ (perintah).

Penjelasan yang lebih baik ada di pertanyaan Unix SE ini !

Jika itu tidak membantu mempercepat pemuatan prompt, tentukan fungsi shell alih-alih alias.

sunting: Jangan lupa untuk menukar argumen cut menjadi tanda kutip ganda seperti yang disebutkan di atas.

hyph
sumber
Itu berhasil! Anda menjawab lebih dulu, sehingga Anda mendapatkan kredit.
iLikeDirt
9

bashmenafsirkan string yang Anda kutip, dan interpretasi itu menjalankan dnf check-updateperintah yang disematkan . Eksekusi ini yang memakan waktu selama definisi alias, bukan dnf updateinfoperintah utama yang Anda aliasing. Coba contoh yang dibuat berdasarkan sleepdan perhatikan bagaimana aliasitu sendiri membutuhkan waktu 5 detik:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

Gunakan tanda kutip tunggal untuk menghindari interpretasi:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

Jangan lupa untuk menukar cutargumen menjadi tanda kutip ganda.

pemurah
sumber