# [gelöst]glsa-check -p $(glsa-check -t all)

## Niniveh

Hallo

Ich bin ziemlich neu bei Gentoo kann leider kaum englisch und probierte für Sicherheitsupdates folgenden Befehl aus:

glsa-check -p $(glsa-check -t all)

Funktionierte anscheinend prima und mit der Option -f wurde das Sicherheitsupdate eingespielt.

Ich verstehe allerdings die Befehlssyntax nicht und frage hier, ob mir jemand dabei helfen möchte.

Wäre nett   :Razz: 

Ich verstehe vor allem die Funktion des Dollarzeichens ($) nicht. Und warum steht der Rest in Klammern?

Ich fand noch Alternativbefehle, die anscheinend auch funktionieren würden, aber eine kleinere Befehlsausgabe haben:

glsa-check -f affected

glsa-check -t all

Auch ist mir etwas rätzelhaft, worin sich diese 3 Befehle in der Funktion unterscheiden?

Sicherheitsupdates gehen anscheinend mit allen dreien.

----------

## Anarcho

Hi, Willkommen bei Gentoo!

Das $() Konstrukt gehört zur bash, also zu deiner Shell. Es bedeutet das die bash den Befehl in Klammern zuerst ausführen soll und die Ausgabe dieses Befehls als Parameter für den Befehl davor angeben soll.

Zum Beispiel mit echo (echo gibt einfach die Paramter als Text wieder aus):

```
workstation ~ $ echo echo text

echo text

workstation ~ $ echo $(echo text)

text
```

Zu glsa-check: Du solltest versuchen die manpage (man glsa-check) zu verstehen. Auch wenn es mit dem Englischen nicht so gut funktioniert. Nimm dann www.leo.org zuhilfe. Wenn du nicht weiter kommst, sag bescheid.

----------

## ChrisJumper

Hallo Niniveh,

sowas ist im Diskussionsforum einfach besser aufgehoben, weil es sich ja nicht direkt um ein Lösbares Problem handelt :)

Zur Einführung in dieses Thema empfehle ich dir dich mit Bashscripting zu beschäftigen. Obwohl es einen haufen Deutscher Seiten im Netz gibt hab ich gerade keine zur Hand, lediglich eine Englische.

Diese Klammer mit dem Dollarzeichen vereinfacht die Ausgabe des befehls glsa-check -t all. Es holt eine Liste aller aktuellen GLSAs, die für dein System von Bedeutung sind und sammelt diese Ausgabe in dieser Dollarzeichen-Klammer.

Das Ergebnis wandert dann sozusagen ans Ende in die Zeile glsa-check -p diese liefert eine Vorschau für die zuvor aufgestapelten "GLSA-Patches". 

Ersetzt du jetzt das -p (engl. pretend, vorspielen/vorgeben) durch ein -f (engl. fix, also in Odrnung bringen/Fehlerbeheben) werden die Pakete dann Runtergeladen und installiert.

Statt des Dollarzeichens und der Klammern könnte man auch 

```
# glsa-check -p `glsa-check -t all`
```

Verwenden. Aber mit diesen Anführungszeichen stehen die meisten auf Kriegsfuss. Wenn man die Falschen verwendet (es tummeln sich ja viele auf der Tastatur... '  ‘ `) funktioniert es nicht wie erwartet.

Kurz: Dieses Dollar+klammern startet intern eine Subshell, also eine neue "Shell" die dann den Befehl ausführt und das Ergebnis Stapelt. Stichwort: Stapelverarbeitung dieses wird dann weitergereicht, an die echte Shell die den Befehl ausführt.

Chris

P.s:

Kennst du  man schon? Steht für Manual/Handbun und gibt manch einmal umfangreichere Informationen zu Progammen zurück, einfach vor das Programm (man glasa-check) setzen und schon hast du ein kleines Handbuch. Mit q kommst du wieder raus.

^^ War ich wieder mal zu langsam *g*

----------

## Genone

 *ChrisJumper wrote:*   

> Statt des Dollarzeichens und der Klammern könnte man auch 
> 
> ```
> # glsa-check -p `glsa-check -t all`
> ```
> ...

 

Das grundlegende Problem mit dieser Syntax ist dass sie nicht geschachtelt werden kann.

[quote="Niniveh]Ich fand noch Alternativbefehle, die anscheinend auch funktionieren würden, aber eine kleinere Befehlsausgabe haben:

glsa-check -f affected

glsa-check -t all [/quote]

Ersteres ist einfach nur eine kürzere Version, die etwas schneller ist, das Ergebnis sollte aber identisch sein.

Der zweite Befehl listet lediglich die IDs der Advisories auf, die auf das aktuelle System zutreffen. Ist hauptsächlich gedacht für Skripte.

----------

## mv

 *Genone wrote:*   

> Das grundlegende Problem mit dieser Syntax ist dass sie nicht geschachtelt werden kann.

 

Aber klar kann sie: 

```
$ echo `echo \`echo A\``

A
```

 Das Problem der Syntax ist vielmehr, dass sich Escapes in `...` anders verhalten als in $(...): 

```
$ echo "$(echo '\"')"

\"

$ echo "`echo '\"'`"

"
```

----------

## Niniveh

Danke Jungs

Das waren aber sehr freundliche Antworten   :Razz: 

Meine primäre Frage ist beantwortet, ich denke dieser Thread kann ich eigentlich als gelöst markieren. (mal schauen wie das hier geht)

@ChrisJumper

 *Quote:*   

> sowas ist im Diskussionsforum einfach besser aufgehoben

 

Werde ich mir merken, Danke. 

Aber ein kleines Problemchen habe ich nun doch, und zwar mit den manpages!

Die werden bei mir nicht angezeigt.

Einige Warnungen, die ich nicht verstehe und unlesbarer Zeichensalat. Was könnte hier die Ursache sein?

Die Ausgabe ist praktisch gleich, egal ob ich man cp, man mv, man echo... eingebe. Nur die Codenummer hinten ist eine andere. 

```
man glsa-check

<standard input>:4: warning: can't find character with input code 2

<standard input>:4: warning: can't find character with input code 6

<standard input>:4: warning: can't find character with input code 3

<standard input>:4: warning [p 1, 0.0i]: can't break line

<standard input>:5: warning: can't find character with input code 127

<standard input>:5: warning: can't find character with input code 4

<standard input>:5: warning [p 1, 0.2i]: can't break line

<standard input>:5: warning: can't find character with input code 12

<standard input>:5: warning [p 1, 0.3i]: cannot adjust line

<standard input>:5: warning [p 1, 0.5i]: can't break line

<standard input>:6: warning: can't find character with input code 5

<standard input>:6: warning: can't find character with input code 7

<standard input>:6: warning [p 1, 0.7i]: cannot adjust line

<standard input>:6: warning [p 1, 0.8i]: can't break line

BZh91AY&SYÐ=±_Pçá>çÝn?ÿßà@íiÝnºí8J      I<41õ=F§z Ðjh5=ODÍ@.....¦&¦Ôò!£i@Ð2P~SM)§©¡ê¡ 4Hômj!)un%ÂñUÜ÷3U+Xªu#J·½ýQ´Ã"WïÞÆæÍ»g+BùsÖÞ¿g4ãè¸

«ÈdÃÌ®§8ìzÈ°>ì&g6X6OFQõa;l«DÃµB(Ý½5     ‐1l¤îÝëïOlwÛèë5(‘:ëðö£]8úèòìA7<>ûÁ~½éxòàqÑ<nÕÇÌ?Ïöhf«¯8Tó‐h}KªÆld¹aU2TABC=Í´à@ÅQ

tlÝÉ"OÒ)i$m°ÚJ¢ª©¬×§°·~E8ÔÕ(

náMH3íZîá/ÖJF&ºµTÀª¬ÈòçwB$!        Ï;7ÃnlÞTxþ@.µ$òÌ4íúÒÏm¶5¬°ðwÙC}O¾ÖªÉê=.¦5»¾4rÒyMï¢×6zµÛM[ÉÝ[ÀI@qìlîXÝ´(TRÎÂN    ÊÈ)»1±

óòcmd¶ºç3ìoFu|ØÂ¿nB¶MF0.ÓDÊ«!3æ3ÎÚ9~Y¤‘)6))?§   µVLÂ

Å‐$f%r_sÜè^q,Àq¥zCZ¥0ZÛ>òpøÞ1ÆéZj¡dåÃQLb¸´}f¸ÕJbÈA:E(ièÂK..RÇ©¶Àq¼e6YUäbTÛ2C3dæcN#7µê(«G²TO8Ôh#:8’©´SJÛï¥Ó|xÄ      8[ºK¢qëó¶¨×Ô/ü]ÉáBB‐

WBpô.
```

----------

## hitachi

 *Niniveh wrote:*   

> Meine primäre Frage ist beantwortet, ich denke dieser Thread kann ich eigentlich als gelöst markieren. (mal schauen wie das hier geht)

 

Einfach beim obersten Post auf edit gehen (bei mir rechts oben) und dann die Subject Zeile entsprechend bearbeiten.

----------

## Finswimmer

 *Niniveh wrote:*   

> Danke Jungs
> 
> Das waren aber sehr freundliche Antworten  
> 
> Meine primäre Frage ist beantwortet, ich denke dieser Thread kann ich eigentlich als gelöst markieren. (mal schauen wie das hier geht)
> ...

 

Das machst du bitte in einen extra Thread. Ist zu spaet als das ich das uebernehmen will  :Wink: 

----------

