Konstrukcja $ (coś) uruchamia polecenie coś , wstawiając jego wynik w wierszu polecenia.
Polecenie grep wyklucza każdą linię rozpoczynającą się od #, opcjonalnie dopuszczając spację przed nią. Następnie polecenie tr zastępuje znaki nowej linii spacjami.
trzawiedzie z wielobajtowymi sekwencjami końca linii (pomyśl \r\n), dlaczego nie używasz xargs?
Ivan Anishchuk
11
Poniższe polecenie stanowi (nieznaczne) ulepszenie w stosunku do alternatywy, ponieważ sudo apt-get installnie jest wykonywane, gdy lista pakietów jest pusta.
Zauważ, że -aopcja odczytuje elementy bezpośrednio z pliku zamiast standardowego wejścia. Nie chcemy przesyłać pliku do pliku, xargsponieważ standardowe wejście musi pozostać niezmienione do użycia przez apt-get.
xargsto właściwy sposób, aby to zrobić. Sztuczka z <()jest schludna.
Ivan Anishchuk
1
To rzeczywiście lepsze rozwiązanie, ponieważ xargsupewnia się, że ARG_MAX nie zostanie osiągnięte.
phk
To musi być xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y installnie „ <(”, ale „ $(”, a opcja -yapt-get byłaby dobrym pomysłem.
Podstawienie procesu przekierowuje wyjście awkdo deskryptora pliku, z którego xargs -amożna czytać. Więc zdecydowanie chcesz <(i nie $(. Po prostu spróbuj, a zobaczysz, co mam na myśli. Jeśli polecenie ma być uruchamiane bez nadzoru, a już wiesz dokładnie, co zostanie zainstalowane, to na pewno -yflagowanie jest dobrym pomysłem.
Sześć
4
Biorąc pod uwagę plik listy pakietów package.list, spróbuj:
Odpowiedzi:
Coś w tym stylu powinno załatwić sprawę.
Konstrukcja $ (coś) uruchamia polecenie coś , wstawiając jego wynik w wierszu polecenia.
Polecenie grep wyklucza każdą linię rozpoczynającą się od #, opcjonalnie dopuszczając spację przed nią. Następnie polecenie tr zastępuje znaki nowej linii spacjami.
źródło
tr
zawiedzie z wielobajtowymi sekwencjami końca linii (pomyśl\r\n
), dlaczego nie używaszxargs
?Poniższe polecenie stanowi (nieznaczne) ulepszenie w stosunku do alternatywy, ponieważ
sudo apt-get install
nie jest wykonywane, gdy lista pakietów jest pusta.Zauważ, że
-a
opcja odczytuje elementy bezpośrednio z pliku zamiast standardowego wejścia. Nie chcemy przesyłać pliku do pliku,xargs
ponieważ standardowe wejście musi pozostać niezmienione do użycia przezapt-get
.źródło
xargs
to właściwy sposób, aby to zrobić. Sztuczka z<()
jest schludna.xargs
upewnia się, żeARG_MAX
nie zostanie osiągnięte.xargs -a $(awk '/^\s*[^#]/' "$packagelist") -r -- sudo apt-get -y install
nie „<(
”, ale „$(
”, a opcja-y
apt-get byłaby dobrym pomysłem.awk
do deskryptora pliku, z któregoxargs -a
można czytać. Więc zdecydowanie chcesz<(
i nie$(
. Po prostu spróbuj, a zobaczysz, co mam na myśli. Jeśli polecenie ma być uruchamiane bez nadzoru, a już wiesz dokładnie, co zostanie zainstalowane, to na pewno-y
flagowanie jest dobrym pomysłem.Biorąc pod uwagę plik listy pakietów
package.list
, spróbuj:źródło
Oto moje rozwiązanie, aby zainstalować listę pakietów, które mam do nowej instalacji:
W
bash
funkcji:grep
wyjaśnienie:-o
zachowaj tylko część wiersza, która pasuje do wyrażenia^[^#]
wszystko, co nie zaczyna się od#
[[:alnum]-]*
ciąg liter, cyfr i-
źródło