Saya memiliki file teks dengan banyak nama paket.
package1
package2
# comment
# installing package3 because it was needed for...
package 3
package 4
Bagaimana cara saya menginstal secara massal semua paket di dalam file teks tanpa menghapus komentar?
Jawaban:
Sesuatu di sepanjang garis ini harus melakukan trik.
Konstruksi $ (sesuatu) menjalankan perintah something , memasukkan outputnya di baris perintah.
Perintah grep akan mengecualikan setiap baris yang dimulai dengan #, secara opsional memungkinkan untuk spasi putih sebelum itu. Kemudian perintah tr menggantikan baris baru dengan spasi.
sumber
tr
akan gagal dengan urutan multi-byte end-of-line (pikirkan\r\n
), mengapa Anda tidak menggunakanxargs
?Perintah berikut ini adalah (sedikit) perbaikan dari alternatif karena
sudo apt-get install
tidak dijalankan ketika daftar paket kosong.Perhatikan bahwa
-a
opsi membaca item langsung dari file daripada input standar. Kami tidak ingin mem-pipe filexargs
karena stdin harus tetap tidak berubah untuk digunakan olehapt-get
.sumber
xargs
adalah cara yang tepat untuk melakukan ini. Trik dengan<()
rapi.xargs
memastikanARG_MAX
tidak tercapai.xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install
, bukan "<(
" tapi "$(
" dan opsi-y
untuk apt-get akan menjadi ide yang bagus.awk
menjadi deskriptor file untukxargs -a
dibaca. Jadi, Anda pasti ingin<(
dan tidak$(
. Coba saja dan Anda akan melihat apa yang saya maksud. Jika perintah itu dijalankan tanpa pengawasan dan Anda sudah tahu persis apa yang akan diinstal kemudian yakin, mereka-y
menandai adalah ide yang baik.Diberikan file daftar paket
package.list
, coba:sumber
Nah, inilah solusi saya untuk menginstal daftar paket yang saya miliki untuk instalasi baru:
Dalam suatu
bash
fungsi:grep
penjelasan:-o
pertahankan hanya bagian garis yang cocok dengan ekspresi^[^#]
apa pun yang tidak dimulai dengan a#
[[:alnum]-]*
urutan huruf, angka dan-
sumber