2016-05-29 6 views
2

Ich führe diesen Befehl in meinem Shell-Skript.Verwenden Sie die Variable als Befehlszeileneingabe im Shell-Skript

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 66 j8 hj g7 d0 f5 a7 10 96 e0 99 99 99 99 c5 00 

ich die 4 Paare von 99 zum gleichen Zufallswert I erzeugt ändern will, habe ich versucht, diesen Code aber ich 00. Die Zufallsfunktion fein arbeitet gut.

random="$(cat /dev/urandom | base64 | head -c 2)" 
echo $random 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 66 j8 hj g7 d0 f5 a7 10 96 e0 $random $random $random $random c5 00 
+0

Ich denke, es gibt etwas, das Sie nicht teilen. Wenn das 'echo $ random' wie erwartet funktioniert, wird der Wert auch in der nächsten Zeile korrekt erweitert. – kojiro

+0

@ DavidC.Rankin, die vier _different_ zufällige Werte erzeugen würde. Das ist nicht, was OP gesagt hat, dass sie wollen. – kojiro

+1

Randbemerkung: Warum werden Sie Base64-Werte generiert, wo der Rest der Eingabe scheint Hex? Willst du "zufällige" nicht auf eine gültige Hex-Zahl beschränken? – kojiro

Antwort

3

Das Problem ist höchstwahrscheinlich, dass cat /dev/urandom | base64 | head -c 2 keine Hexadezimalzahl erzeugen. Versuchen Sie, diese Art und Weise statt:

random=$(cat /dev/urandom | head -c 1 | xxd -p) 

Und statt mit cat und head, wäre es einfacher und sauberer mit nur xxd (dank @kojiro für den Tipp!):

random=$(xxd -p -l1 < /dev/urandom) 
+0

viel kürzer als es durch 'bc' zu laufen –

+0

Anstatt dd zu verwenden, um die Länge zu begrenzen, wie wäre es mit' xxd -p -l1 kojiro

+0

danke @kojiro, das ist viel besser – janos

0

Wie wäre es

random=$(printf "%02x\n" $((RANDOM % 256))) # zsh and bash 

?

BTW, wenn Sie keine führende Null für Hex-Zahlen kleiner als 10 benötigen, und wenn es OK ist, Zsh anstelle von Bash zu verwenden, können Sie auch folgendermaßen vorgehen, das keinen $(...)-Subprozess benötigt :

random=$(([##16] (RANDOM & 16#FF))) # zsh only 
Verwandte Themen