Cara membuat alias dengan perintah berisi 'dan "

10

Beberapa posting yang lalu seseorang bertanya bagaimana menampilkan memori dalam persentase. Seseorang menjawab dengan:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

Saya bertanya-tanya apakah saya dapat mengubah perintah ini menjadi alias di ~ / .bashrc. Tetapi sintaks alias adalah:

alias aliasname='command'

Bagaimana saya bisa melakukan ini? Perintah itu mengandung keduanya 'dan ". Saya mencoba berbagai cara, tetapi tidak berhasil. Apakah ini mungkin? Apakah saya melewatkan sesuatu?

BlackCrystal
sumber
5
Untuk menghindari mengutip neraka, mungkin lebih mudah untuk hanya mendefinisikan suatu fungsi dalam kasus seperti itu.
nohillside
1
Fungsi @nohillside umumnya lebih bermanfaat / kuat
D. Ben Knoble
1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }- masih hanya satu baris, tidak ada perubahan untuk mengutip / melarikan diri / etc diperlukan sama sekali. Ada alasan !aliasfactoid saluran freenode #bash adalah (well, was , tetapi untuk sebagian besar kehidupan bot factoid beberapa varian): Jika Anda harus bertanya, gunakan fungsi sebagai gantinya .
Charles Duffy

Jawaban:

8

Anda membutuhkan:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

Perhatikan bahwa Anda harus melarikan diri dari keduanya "dan $.

Arkadiusz Drabczyk
sumber
17

Mengatakan bahwa sintaks alias alias aliasname='command'agak menyesatkan, karena tampaknya menyiratkan bahwa tanda kutip tunggal adalah bagian dari sintaks. Mereka tidak. Bagian setelah tanda sama dengan mirip dengan penugasan variabel, dalam hal itu bisa berupa kata shell , terdiri dari karakter polos (tanpa tanda kutip), atau string yang dikutip, atau kombinasi.

Ini semua valid, dan tiga padanan terakhir:

alias ks=ls
alias ls='ls -l'
alias ls="ls -l"
alias ls=ls\ -l

Jadi, yang perlu Anda lakukan adalah melarikan diri dari tanda kutip dengan benar agar ada di dalam nilai alias.

Lihat, misalnya jawaban ini dan jawaban lain untuk misalnya pertanyaan ini untuk diskusi tentang itu:

Atau, gunakan fungsi alih-alih alias untuk menyingkirkan masalah kutip sepenuhnya:

freemem() {
    free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'
}
ilkkachu
sumber