Ich habe eine Textdatei mit vielen Paketnamen.
package1
package2
# comment
# installing package3 because it was needed for...
package 3
package 4
Wie kann ich alle Pakete in der Textdatei massenweise installieren, ohne die Kommentare zu entfernen?
Antworten:
Etwas in diese Richtung sollte den Trick tun.
Die $ (something) -Konstruktion führt den something- Befehl aus und fügt seine Ausgabe in die Befehlszeile ein.
Der Befehl grep schließt alle Zeilen aus, die mit einem # beginnen, und lässt optional Leerzeichen davor zu. Dann ersetzt der Befehl tr Zeilenumbrüche durch Leerzeichen.
quelle
tr
wird mit Multibyte-Zeilenende-Folgen scheitern (denken Sie\r\n
), warum verwenden Sie nichtxargs
?Der folgende Befehl ist eine (geringfügige) Verbesserung gegenüber der Alternative, da er
sudo apt-get install
nicht ausgeführt wird, wenn die Paketliste leer ist.Beachten Sie, dass die
-a
Option Elemente direkt aus einer Datei anstelle der Standardeingabe liest. Wir wollen keine Dateixargs
einfügen, da stdin für die Verwendung von unverändert bleiben mussapt-get
.quelle
xargs
ist der richtige Weg, um dies zu tun. Trick mit<()
ist ordentlich.xargs
sichergestelltARG_MAX
ist, dass nicht erreicht wird.xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install
, nicht "<(
" sondern "$(
" und die Option-y
für apt-get wäre eine gute Idee.awk
in einen Dateideskriptor umxargs -a
, aus dem gelesen werden kann. Also willst du definitiv<(
und nicht$(
. Probieren Sie es einfach aus und Sie werden sehen, was ich meine. Wenn der Befehl unbeaufsichtigt ausgeführt werden soll und Sie bereits genau wissen, was installiert werden soll,-y
ist es eine gute Idee , sie zu kennzeichnen.package.list
Versuchen Sie anhand einer Paketlistendatei Folgendes:quelle
Nun, hier ist meine Lösung, um eine Liste der Pakete zu installieren, die ich für die Neuinstallation habe:
In einer
bash
Funktion:grep
Erklärung:-o
Behalten Sie nur den Teil der Zeile bei, der dem Ausdruck entspricht^[^#]
alles was nicht mit a beginnt#
[[:alnum]-]*
eine Folge von Buchstaben, Zahlen und-
quelle