2016-11-18 6 views
0

Warum in der Befehlszeile diese Arbeit würde:Parsing auf der Kommandozeile arbeitet, aber nicht in Shell-Skript

redis-cli info | grep instantaneous_ops_per_sec | cut -d : -f 2 

... aber nicht, wenn ich auf eine Variable in einem Shell-Skript zuweisen das? z.B.

num=`redis-cli info` | grep instantaneous_ops_per_sec | cut -d : -f 2 

Im Zusammenhang damit, warum hat die Zuordnung die Rohausgangssignal von redis-cli info auf ein Shell-Variable und dann hallt es in einer verstümmelten Version der redis-cli Ausgabe zur Folge haben?

Antwort

1

Wenn eine Variablen erfassen sollten Sie die gesamte Kette von Befehlen in einem Sub-Shell setzen, nicht nur der Anfangsteil:

num=$(redis-cli info | grep instantaneous_ops_per_sec | cut -d : -f 2) 

Auch ist es besser $() zu verwenden, anstatt Vermächtnis Backticks.

+0

Ich schwöre, ich hatte das versucht. : -/ Warum "cat" eine Datei in eine Shell-Variable und dann diese Datei widerspiegelt, führt zu einer verstümmelten Version dieser Datei? – rivenmyst137

+0

@ rivenmyst137 Klingt wie [diese Ausgabe] (http://stackoverflow.com/questions/29378566/i-just-assigned-a-variable- but-echo-variable-shows-etwas-else) –

Verwandte Themen