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 alert
memberikan pemberitahuan dengan Alert teks dan ikon terminal. Menjalankannya dengan satu param seperti alert !!!!!
memberi pemberitahuan dengan teks Alert !!!!! dan !!!!! .
Jadi, apa perbedaan antara notify-send
perintah 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
bash
notification
Pengguna Terdaftar
sumber
sumber
notify-send Linux Ubuntu
itu hampir sama, satu-satunya perbedaan adalah yangalert
menunjukkan ikon. Tapi saya tidak mengerti mengapa perintah itu berisi sed, ekor dan sejarahJawaban:
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:
Ini akan menggemakan terminal atau kesalahan sesuai dengan status eksekusi - berhasil atau gagal masing-masing dari perintah terakhir; dan hasilnya adalah sebagai nilai untuk
-i
beralihnotify-send
untuk menampilkan ikon...untuk menjalankan perintah terakhir.
dan
sed
untuk mem-parsing teks untuk menampilkannya dengannotify-send
pesan.Untuk memahami ini coba yang berikut ini:
..ini akan gema terminal .
..ini akan mengulangi kesalahan .
Dan,
..adalah sangat berguna untuk mengetahui nilai keluar dari perintah terakhir yang dijalankan.
..nested
echo
sebagai demo sederhana untuk digunakan$()
dalam kombo perintah.sumber
notify-send
.. status keluar dari perintah terakhir diperiksa dengan nilai$?
.. Saya sudah memasukkan ini dalam edit ..Biarkan saya mencoba menjelaskan apa yang terjadi di sini:
1
--urgency=low
2
-i "$([ $? = 0 ] && echo terminal || echo error)"
.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:
Ini akan menampilkan peringatan dengan perintah sebelumnya.
sumber
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; alert
akan menampilkan pemberitahuan perintah (sleep 10
dalam 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>; alert
tempat 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).sumber
Alasannya
sed
,,tail
danhistory
adakah 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 digunakanhistory
untuk mendapatkan daftar semua yang Anda ketikkan,tail -n1
untuk 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
$? = 0
itu 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.sumber
$0
memberi Anda argumen pertama untuk sebuah perintah. Mungkin berbeda dalam kasus alias.