Bagaimana saya bisa menjalankan perintah sebelum apt-get mulai mengunduh paket?
Saya tahu tentang kait pra-pemanggilan dpkg ( kaitkan skrip ke apt-get ), tetapi itu tampaknya dijalankan setelah pengunduhan.
$ apt-get update
Get: 11 http://security.debian.org/ wheezy/updates/main qemu amd64 1.1.2+dfsg-6a+deb7u7 [115 kB]
Fetched 70.9 MB in 10s (6,776 kB/s)
refreshing freenet index
--2015-05-19 15:55:25-- http://127.0.0.1:8888/freenet:USK@oRy7ltZLJM-w-kcOBdiZS1pAA8P-BxZ3BPiiqkmfk0E,6a1KFG6S-Bwp6E-MplW52iH~Y3La6GigQVQDeMjI6rg,AQACAAE/deb.mempo.org/-42/
Yang kita butuhkan adalah menjalankan perintah sebelum mengunduh. Lebih tepatnya: Skrip harus dijalankan setelah memanggil apt-get tetapi sebelum apt-get mengakses sumber daya online apa pun.
Apakah ada sesuatu seperti kait Pra-Unduh?
Adalah penting bahwa instalasi dapat dilakukan tanpa harus mengganti skrip apt-get (dan tanpa melakukan hal lain yang dapat dibatalkan oleh pembaruan).
apt-get
yang dengan sendirinya akan memanggil yang asliapt-get
. Bergantung pada cakupan yang Anda inginkan, fungsi tersebut dapat dideklarasikan di/etc/profile
atau~/.profile
atau~/.bashrc
.Jawaban:
Bagaimana dengan menggunakan kait apt pre / post-invoke?
Pada dasarnya ini mirip dengan kait dpkg pre / post-invoke tetapi untuk apt (yang saya asumsikan sebenarnya adalah yang penting dalam skenario penggunaan Anda). AFAIK ada yang lain tapi saya hanya pakai seperti ini.
Misalnya
sumber
apt-get update
.Pertama menentukan di mana apt-get menggunakan
whereis apt-get
atauwhich apt-get
; Saya akan menganggap itu di / usr / bin / apt-getKemudian buat file di / usr / local / bin / apt-get dengan konten ini:
sekarang
chmod +x /usr/local/bin/apt-get
.Ini harus bertahan dari semua peningkatan distribusi tetapi tidak boleh mengubah perilaku apt-get (selain menjalankan perintah sebelum melakukan hal lain). Sebagai bonus, itu bisa menguraikan argumen baris perintah untuk hanya menjalankan perintah ketika itu benar-benar diperlukan.
(Jawaban ini dibangun berdasarkan jawaban Mohammad Etemaddar , digabung dengan umpan balik dari muru)
sumber
Anda dapat menggunakan "alias" di file .bashrc. Misalnya, taruh itu di file root .bashrc Anda:
Argumen baris perintah akan ditambahkan secara otomatis ke akhir alias.
Cukup ganti
echo blahblah
dengan perintah yang Anda butuhkan.Tetapi dalam kasus ini, ini hanya berfungsi ketika Anda menjalankan perintah sebagai root (bukan sudo).
sumber
alias apt-get='echo blahblah && sudo apt-get'
. Maka Anda hanya perlu mengetikkan terminal misalnya -apt-get update
tanpasudo
, dan Anda akan diminta kata sandi sudo secara otomatis./usr/local/bin
atau~/bin
), karena alias tidak menangani argumen dengan baik.Pertama menentukan di mana apt-get menggunakan
whereis apt-get
; Saya akan menganggap itu di / usr / bin / apt-getsebagai Muru mengatakan, Anda dapat membuat skrip bernama
apt-get
di/usr/local/bin/
yang sebelumnya/usr/bin
di Debian dan Ubuntu$PATH
. Kemudian masukkan kode berikut ke sana (/usr/local/bin/apt-get
):Terima kasih muru untuk tawaran sebagai komentar.
Cara lain:
Tentu saja ada cara lain yang tidak lebih baik dari yang sebelumnya.
Kamu bisa
mv /usr/bin/apt-get /usr/bin/apt-get2
Kemudian buat file di / usr / bin / apt-get dengan konten ini:
sekarang
chmod +x /usr/bin/apt-get
sumber
$@
menyebabkan skrip bekerja dengan setiap argumen./usr/local/bin
, yang ada/usr/bin
di PATH default di Debian dan Ubuntu.apt-get
Eksekusi terletak di/usr/bin/apt-get
, bukansbin
. (B) Jangan main-main dengan perintah sistem. Seperti yang dikatakan muru, Anda dapat membuat override lokal/usr/local/bin
, meskipun itu pun bukan solusi yang baik.Coba alias di
.bashrc
file. Ini hanya berfungsi ketika masuk ke akun yang sesuai dengan file. Sintaks alias adalah:alias newcommand='command1; command2; command3'
Jadi baris Anda mungkin terlihat sedikit seperti ini:alias apt-get='firstcommand; apt-get'
Atau ini:
alias apt-get='firstcommand && apt-get'
Dengan yang kedua,
apt-get
hanya akan mengeksekusi jikafirstcommand
berhasil.sumber