Tengo un archivo de texto con muchos nombres de paquetes.
package1
package2
# comment
# installing package3 because it was needed for...
package 3
package 4
¿Cómo puedo instalar en masa todos los paquetes dentro del archivo de texto sin eliminar los comentarios?

Respuestas:
Algo en este sentido debería hacer el truco.
La construcción $ (algo) ejecuta el comando algo , insertando su salida en la línea de comando.
El comando grep excluirá cualquier línea que comience con un #, opcionalmente permitiendo espacios en blanco antes. Luego, el comando tr reemplaza las nuevas líneas con espacios.
fuente
trfallará con las secuencias de fin de línea de varios bytes (piense\r\n), ¿por qué no lo usaxargs?El siguiente comando es una mejora (leve) sobre la alternativa porque
sudo apt-get installno se ejecuta cuando la lista de paquetes está vacía.Tenga en cuenta que la
-aopción lee elementos directamente de un archivo en lugar de la entrada estándar. No queremos canalizar un archivoxargsporque stdin debe permanecer sin cambios para su usoapt-get.fuente
xargses la forma correcta de hacer esto. Truco con<()es ordenado.xargsse asegura deARG_MAXque no se alcance.xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install, no "<(" sino "$(" y la opción-ypara apt-get sería una buena idea.awka un descriptor de archivo paraxargs -aleer. Entonces definitivamente quieres<(y no$(. Solo pruébalo y verás lo que quiero decir. Si el comando se ejecuta sin supervisión y ya sabe exactamente lo que se va a instalar, entonces seguro,-ymarcar es una buena idea.Dado un archivo de lista de paquetes
package.list, intente:fuente
Bueno, aquí está mi solución para instalar una lista de paquetes que tengo para una instalación nueva:
En una
bashfunción:grepexplicación:-omantener solo la parte de la línea que coincide con la expresión^[^#]todo lo que no comienza con un#[[:alnum]-]*una secuencia de letras, números y-fuente