Penggunaan alias "peringatan" default


9

Lansiran alias default adalah untuk perintah

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

Eksekusi alertmemberikan pemberitahuan dengan Alert teks dan ikon terminal. Menjalankannya dengan satu param seperti alert !!!!!memberi pemberitahuan dengan teks Alert !!!!! dan !!!!! .

Jadi, apa perbedaan antara notify-sendperintah sederhana dan alias rumit ini yang menggunakan notify-send, echo, history, tail and sed ?

Dalam situasi apa alias ini berguna atau hanya dibuat untuk pelesetan (Sesuatu seperti menggunakan sudo sudo sudo sudo sudo apt-get install

Saya menggunakan Ubuntu 12.10


Satu-satunya hal yang dapat saya pikirkan adalah membuat membuat pemberitahuan lebih mudah ... mungkin?
saiarcot895

@ saiarcot895 coba notify-send Linux Ubuntuitu hampir sama, satu-satunya perbedaan adalah yang alertmenunjukkan ikon. Tapi saya tidak mengerti mengapa perintah itu berisi sed, ekor dan sejarah
Pengguna Terdaftar

Jawaban:


8

Anda bisa menggunakan halaman manual untuk mendapatkan detail tentang apa yang dilakukan perintah gabungan di sini. Inilah sedikit tentang tujuan dari perintah-perintah itu di sini:

"$([ $? = 0 ] && echo terminal || echo error)"

Ini akan menggemakan terminal atau kesalahan sesuai dengan status eksekusi - berhasil atau gagal masing-masing dari perintah terakhir; dan hasilnya adalah sebagai nilai untuk -iberalih notify-senduntuk menampilkan ikon.

history|tail -n1

..untuk menjalankan perintah terakhir.

dan seduntuk mem-parsing teks untuk menampilkannya dengan notify-sendpesan.


Untuk memahami ini coba yang berikut ini:

true; echo "$([ $? = 0 ] && echo terminal || echo error)"

..ini akan gema terminal .

false; echo "$([ $? = 0 ] && echo terminal || echo error)"

..ini akan mengulangi kesalahan .

notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'

Dan,

echo $?

..adalah sangat berguna untuk mengetahui nilai keluar dari perintah terakhir yang dijalankan.

echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."

..nested echosebagai demo sederhana untuk digunakan $()dalam kombo perintah.


1
jadi alias ini dapat digunakan untuk memberi tahu pengguna apakah perintah itu berhasil atau gagal, tetapi dengan cara GUI.
Pengguna Terdaftar

ya itu akan memberitahukan tentang eksekusi yang berhasil atau tidak berhasil secara grafis menggunakan notify-send.. status keluar dari perintah terakhir diperiksa dengan nilai $?.. Saya sudah memasukkan ini dalam edit ..
tepat

7

Biarkan saya mencoba menjelaskan apa yang terjadi di sini:

notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"

1 --urgency=low

-u, --urgency = LEVEL Menentukan level urgensi (rendah, normal, kritis).

2 -i "$([ $? = 0 ] && echo terminal || echo error)" .

  -i, --icon=ICON[,ICON...]
         Specifies an icon filename or stock icon to display.

Bagian ini "$([ $? = 0 ] && echo terminal || echo error)". $?adalah kesalahan terakhir (atau keberhasilan) yang dikembalikan. Jadi ia mengembalikan teks "terminal" jika kode keluar perintah terakhir adalah 0, tanpa kesalahan. Atau mengembalikan "kesalahan" jika kode keluar bukan 0.

Dan akhirnya kita mendapatkan ikon "terminal" atau "kesalahan".

3 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')

history|tail -n1 mengembalikan perintah terakhir dari sejarah.

sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'') ini dapat dipisahkan dalam 2 blok sed.

3.1. sed 's/^\s*[0-9]\+\s*//'hapus semua spasi dan tab sebelumnya, semua angka setelah itu, dan juga hapus spasi dan tab di bagian akhir.

3.2. s/[;&|]\s*alert$//menghapus simbol sebelumnya ; & |, tab dan spasi apa saja dan kata "peringatan".

Itu hanya bersih perintah terakhir dieksekusi dari simbol, dan kata "waspada" di akhir.

Jadi jika Anda menggunakan beberapa hal seperti ini:

echo "Hello alert" | alert

Ini akan menampilkan peringatan dengan perintah sebelumnya.


3

Saya pikir jawaban saat ini menjelaskan bagaimana pekerjaan dalam pekerjaan waspada (yang saya ingin tahu karena penasaran dan yang membuat saya di sini). Tapi saya pikir OP asli menanyakan apa yang berguna yang akan saya coba jelaskan seperti yang saya pahami dari pujian di atas deklarasi.

Ini pada dasarnya digunakan untuk mengingatkan Anda ketika sebuah perintah telah selesai ketika Anda tidak bisa duduk menonton terminal sepanjang waktu menunggu itu selesai. Sesuai contoh commend sleep 10; alertakan menampilkan pemberitahuan perintah ( sleep 10dalam hal ini) dengan ikon terminal jika berhasil (sleep 10 akan memakan waktu 10 detik untuk menyelesaikan).

Dari sini Anda dapat melihat bahwa itu harus digunakan sebagai <command>; alerttempat Anda mengganti perintah dengan perintah Anda. Saya pribadi harus mengunduh video setiap hari melalui wget karena gagal secara berkala. Jadi saya hanya menambahkan perintah unduh dengan lansiran untuk segera memberi tahu saya jika gagal sehingga dapat dilanjutkan lagi (lansiran saya dimodifikasi juga berbunyi bip untuk mendapatkan perhatian saya).


0

Alasannya sed,, taildan historyadakah karena itu perlu mendapatkan pesan yang Anda ketikkan. (Untuk beberapa alasan,) apa yang Anda ketikkan tidak tersedia secara langsung melalui variabel apa pun. Oleh karena itu, ia harus digunakan historyuntuk mendapatkan daftar semua yang Anda ketikkan, tail -n1untuk mendapatkan hal terakhir yang Anda ketikkan, dan beberapa regex untuk menyingkirkan perintah "peringatan" di awal.

Hanya untuk memperluas ini, ada perintah kondisional di sana yang menguji untuk melihat apakah $? = 0itu benar. Dari apa yang bisa saya katakan, jika itu benar, maka itu berasal dari terminal, dan harus dianggap sebagai pesan normal. Kalau tidak, itu harus dianggap sebagai kesalahan, dan ikon kesalahan akan muncul.


Itu tidak menghilangkan peringatan , itu akan tetap dalam notifikasi.
Pengguna Terdaftar

1
Jika Anda menjawab dengan "karena suatu alasan" sering kali bukan jawaban yang sangat bagus;)
Requist

@Requist: Saya menambahkan "untuk beberapa alasan" untuk pernyataan spesifik itu karena saya mendapat kesan yang $0memberi Anda argumen pertama untuk sebuah perintah. Mungkin berbeda dalam kasus alias.
saiarcot895
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.