Proble mit Abostrophen, in Linux CLI. Nesting?!

Gast #6535450
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!
Gast #6535581
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
#6535583
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
#6535645
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.
Gast #6536388
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.
Gast #6536406
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.
#6536435
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)"
Gast #6536484
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.
#6536493
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren