Forum: PC Hard- und Software Proble mit Abostrophen, in Linux CLI. Nesting?!


von Mike (Gast)


Lesenswert?

Hallo zusammen,

ich bin ziemlicher Neuling in der Kommandozeile unter Linux.

Ich möchte nun Daten via CLI in Linux Mint in eine InfluxDB schreiben.

Befehl ist aus einem Tutorial 
(http://www.andremiller.net/content/grafana-and-influxdb-quickstart-on-ubuntu) 
wie folgt:
1
curl -i -XPOST 'http://localhost:8086/write?db=statsdemo' --data-binary 'cpu,host=serverA value=`cat /proc/loadavg | cut -f1 -d" "`'

Leider kann ich den Befehl nicth ausführen ("invalid boolean").

Ich glaube es hängt mit den Abostrophen im Befehl Cut zusammen? Weil 
wenn ich das ganze in einzelne Schritte zerlege scheint es zu 
funktionieren.

Wie nennt man das? Nesting? Wo finde ich mehr Informationen darüber?

Was muss ich ändern, damit es funktioniert?

Vielen Dank schonmal!

von wendelsberg (Gast)


Lesenswert?

Probiers doch mal so, wie es auf dem Screenshot des Tutorials zu sehen 
ist.

wendelsberg

von C. A. Rotwang (Gast)


Lesenswert?

Mike schrieb:
> Wie nennt man das? Nesting? Wo finde ich mehr Informationen darüber?

Das nennt man 'verzählt', denn es müssen eigentlich (immer) Paare sein.
Mit 'nesting' meinste wohl Nested comments - aber das ist es nicht.
Mehr darüber findest du in jedem gescheiten Buch über bash-programming. 
Wenn der Buchladen zuhat dann versuch es mal mit den 'man-pages'.

Stichwort ist u.a. 'command substitution', das sind die anderen 
Hochkommas als beim character quoting.

Da steht eigentlich alles zum Thema und ebenfalls DAU-freundlich in 
deutsch: 
http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_004_003.htm

Eine gute Quelle war auch mal das Linux-Anwenderbuch:
https://www.nosy-x.com/Linuxhandbuch.pdf

von Tom K. (ez81)


Lesenswert?

Mit netcat kannst du sehen, was ankäme:

Version im Website-Text:
1
$ nc -l 8086
2
POST /write?db=statsdemo HTTP/1.1
3
Host: localhost:8086
4
User-Agent: curl/7.47.0
5
Accept: */*
6
Content-Length: 58
7
Content-Type: application/x-www-form-urlencoded
8
9
cpu,host=serverA value=`cat /proc/loadavg | cut -f1 -d" "`

Version im Screenshot:
1
$ nc -l  8086
2
POST /write?db=statsdemo HTTP/1.1
3
Host: localhost:8086
4
User-Agent: curl/7.47.0
5
Accept: */*
6
Content-Length: 27
7
Content-Type: application/x-www-form-urlencoded
8
9
cpu,host=serverA value=0.06

von Daniel A. (daniel-a)


Lesenswert?

In single quotes '' werden `` und $ nicht expandiert, in double quotes 
"" schon.
1
$ echo "a `echo "b c"` d"
2
a b c d
3
$ echo 'a `echo "b c"` d'
4
a `echo "b c"` d
5
$ echo "a $(echo "b c") d"
6
a b c d
7
$ echo 'a $(echo "b c") d'
8
a $(echo "b c") d

"set -x" ist oft auch noch sehr hilfreich, um solchen kram zu debugen. 
Kann man der Shell auch gleich beim Aufruf mitgeben, z.B: "bash -x 
script.bash"
1
$ set -x
2
$ echo "a `echo "b c"` d"
3
++ echo 'b c'
4
+ echo 'a b c d'
5
a b c d
6
$ echo 'a `echo "b c"` d'
7
+ echo 'a `echo "b c"` d'
8
a `echo "b c"` d
9
$ echo "a $(echo "b c") d"
10
++ echo 'b c'
11
+ echo 'a b c d'
12
a b c d
13
$ echo 'a `echo "b c"` d'
14
+ echo 'a `echo "b c"` d'
15
a `echo "b c"` d

Ich bevorzuge ja $() stat ``, ich finde da einfach klarer, was zusammen 
gehört, geht aber beides.

von Rolf M. (rmagnus)


Lesenswert?

C. A. Rotwang schrieb:
> Das nennt man 'verzählt', denn es müssen eigentlich (immer) Paare sein.

Also ich sehe dort nur Paare.
Das Problem ist, wie schon angedeutet wurde, dass in dem Text die " mit 
den ' vertauscht wurden. Der Screenshot darunter zeigt es richtig herum.

von '´`'´`""'´`"'´`"! (Gast)


Lesenswert?

Rolf M. schrieb:
> Das Problem ist, wie schon angedeutet wurde, dass in dem Text die " mit
> den ' vertauscht wurden.

Wo bei man dem Autor nur anlasten kann sein Zeug, nach dem es durch die 
web Software  verwurstet wurde, nicht noch ein mal getestet hat..

von Paul (Gast)


Lesenswert?

> Abostrophen

Was ist das? Habe gerade einen Lachflash bekommen. Sollten wirklich 
Apostrophen gemeint sein, wie Daniel A glaubt. Ich wäre selbst nicht 
darauf gekommen.

von C. A. Rotwang (Gast)


Lesenswert?

Rolf M. schrieb:
> C. A. Rotwang schrieb:
>> Das nennt man 'verzählt', denn es müssen eigentlich (immer) Paare sein.
>
> Also ich sehe dort nur Paare.
> Das Problem ist, wie schon angedeutet wurde, dass in dem Text die " mit
> den ' vertauscht wurden. Der Screenshot darunter zeigt es richtig herum.

Ja, aber eben ineinander verschachtelte Paare, durch das Vertauschen 
zweier 'Paarhälften' ist eben diese unzulässige Verschachtelung 
entstanden. Eben ähnlich wie bei Verwendung mehrerer Klammerebenen - 
eine äußere Klammer wird geschlossen, während eine innere noch geöffnet 
ist.

Bei Programmiesprachen schafft es der Editor durch Einrückungen etc. die 
unterschiedlichen 'Klammer-Ebenen' anzuzeigen, in der Befehlszeile hab 
ich eine solche Unterstützung noch nicht gesehen.

Wobei das Problem nicht am Command Line Interface (CLI) liegt, sondern 
an der Zunehmenden Unsitte in Anleitungen gering erklärte cmd-line 
Ungetüme zu präsentieren.
Besser ist es da, stück um Stück zu erklären wie man Paramter findet, 
command-line Options von paramter String trennst und so den eigentlichen 
Befehl zusammenbastelt.

von c.m. (Gast)


Lesenswert?

Mike schrieb:
> wie folgt:
>
1
curl -i -XPOST 'http://localhost:8086/write?db=statsdemo' 
2
> --data-binary 'cpu,host=serverA value=`cat /proc/loadavg | cut -f1 -d" 
3
> "`'

Doofe Backticks durch $() ersetzen, useless use of cat vermeiden.
1
--data-binary "cpu,host=serverA value=$(cut -f1 -d' ' < /proc/loadavg)"

Off Topic Tip. Json als Übertragungsformat verwenden.

von Rolf M. (rmagnus)


Lesenswert?

C. A. Rotwang schrieb:
> Ja, aber eben ineinander verschachtelte Paare, durch das Vertauschen
> zweier 'Paarhälften' ist eben diese unzulässige Verschachtelung
> entstanden.

Aber auch das ist hier nicht der Fall.

c.m. schrieb:
> useless use of cat vermeiden.

Und am besten auch gleich das unnötige Umleiten der Datei nach stdin:
1
--data-binary "cpu,host=serverA value=$(cut -f1 -d' ' /proc/loadavg)"

von C. A. Rotwang (Gast)


Lesenswert?

Rolf M. schrieb:
> C. A. Rotwang schrieb:
>> Ja, aber eben ineinander verschachtelte Paare, durch das Vertauschen
>> zweier 'Paarhälften' ist eben diese unzulässige Verschachtelung
>> entstanden.
>
> Aber auch das ist hier nicht der Fall.

Naja so hört sich aber die Einlassung:
"Das Problem ist, wie schon angedeutet wurde, dass in dem Text die " mit
den ' vertauscht wurden. "
an.

Aber du meinst wohl das statt einer "-Klammerung-" eine '-Klammerung-' 
und umgekehrt benutzt werden sollte. Ja das Problem kennt man noch aus 
Zeiten wo man ein awk-script in eine command-line quetschen wollte.

> Der Screenshot darunter zeigt es richtig herum.
> auch an.

ich seh hier keinen Screenshoot (*.png-Anhang), nur einen in ?Code-tags? 
zitierten Schnipsel ohne ' oder " .

Das ist IMHO zu bevorzugen, sepaart die eingeschachtelten Befehle 
auszuführen und deren Ergebniss zu verwenden. Kann mach auch über 
Variablen machen. Es spielen halt verschiedenen Substitutionen 
ineinander, da kann man schon mal den Überblick verlieren, welche 
Instanz nun was womit ersetzt.

von Rolf M. (rmagnus)


Lesenswert?

C. A. Rotwang schrieb:
> Rolf M. schrieb:
>> C. A. Rotwang schrieb:
>>> Ja, aber eben ineinander verschachtelte Paare, durch das Vertauschen
>>> zweier 'Paarhälften' ist eben diese unzulässige Verschachtelung
>>> entstanden.
>>
>> Aber auch das ist hier nicht der Fall.
>
> Naja so hört sich aber die Einlassung:
> "Das Problem ist, wie schon angedeutet wurde, dass in dem Text die " mit
> den ' vertauscht wurden. "
> an.

Nein, denn es wurde nicht ein einzelnes " mit einem ' vertauscht, 
sondern die beiden Parre (daher schrieb ich "die" und nicht "eines 
der"). Statt " abc 'xyz' " ist es ' abc "xzy" ' gewesen.

> ich seh hier keinen Screenshoot (*.png-Anhang), nur einen in ?Code-tags?
> zitierten Schnipsel ohne ' oder " .

Mit "dem Text" meinte ich den verlinkten Text, von dem diese 
Kommandozeile stammt, nicht das Posting:

Mike schrieb:
> Befehl ist aus einem Tutorial
> (http://www.andremiller.net/content/grafana-and-influxdb-quickstart-on-ubuntu)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.