2016-06-03 1 views
0

Hier ist der Code, den ich gerade habe: Es scheint Zeilenumbrüche vor der Hash-Ausgabe aus irgendeinem seltsamen Grund, dass ich nicht herausfinden kann.Bash: Newlines in der Ausgabe von Code

hash=$(printf "$pswdOne\n$pswdTwo"|grub-mkpasswd-pbkdf2 |awk '{print $7}') 
myname=$(whoami) 

echo "" > ./testoutput 
printf "set superusers=\"$myname\"" >> ./testoutput 
printf "\npassword_pbkdf2 $myname $hash" >> ./testoutput 

Hier ist der Ausgang:

set superusers="thornegarvin" 
password_pbkdf2 thornegarvin 

grub.pbkdf2.sha512.10000.03266E0763AA0C4E3D97C6DEA85DFBC4D34F97630C9FDE42B53E66D900341FF9F0988A7161C5A8B8EFA88AC33B1A06D459B6DA4D066EAB0EAC6B398DFF5FC3BB.614FE51D9ABB0D81695D080F9DF234FE05AB2955F485EC314917764D7E0DC3F3CC239F8C26DE36A8418E33CB89085312F0A9B6E283C407A4B8B3A2C1BC91C7F6 
+2

Was ist die Ausgabe von 'printf "==% s == \ n" "$ hash"'? (Beachten Sie, dass es empfehlenswert ist, '% s' anstelle von Interpolation für Parameterwerte zu verwenden, um die Möglichkeit zu vermeiden, dass der Parameterwert' %' -Sequenzen enthält. Ich denke jedoch, dass dies kein Problem ist.) – chepner

Antwort

2

einen Blick auf Ihre Ausgabe Nehmen Sie zum printf "$pswdOne\n$pswdTwo"|grub-mkpasswd-pbkdf2 Sie 3 Zeilen ausgegeben finden:

$ printf "test\ntest"|grub-mkpasswd-pbkdf2 
Enter password: 
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.A4ED2A115DD054DD002C6C70189AEE5DB2E737D4126BC15BD317EDD3A12FE9A1F1ED30AAEA6B223ABA19D5168867B57455491EB7B8E7B73FC0EAB617EC915B82.3C97F68C849082874FB72AB5DA50C1E33975894E1209D0E0FFAF23B784CC6E63E4D62778BC2917834E689C192DCE29D8E1620DFC4C2E97D447B89E3651AC829E 

Wenn Sie awk '{print $7}', die Sie zwei bekommen Null-Datensätze, die nur Zeilen-Feeds und dann Ihr Hash sind. Stattdessen tun so etwas wie:

printf "test\ntest"|grub-mkpasswd-pbkdf2 | tail -1 | awk '{print $7}' 

oder

printf "test\ntest"|grub-mkpasswd-pbkdf2 | awk '$1=="PBKDF2"{print $7}' 
+2

oder 'awk '/ g/{print $ 7}'' und du kannst statt printf auch echo -e verwenden: 'echo -e" hi \ nhi \ n "| grub-mkpasswd-pbkdf2 | awk '/ g/{print $ 7}' ' – jrwren

+0

Ich habe nie'/g/'benutzt. Christus, das ist praktisch zur Hölle. Ich habe einen Code, der aktualisiert werden soll. – JNevill

+0

Ich verwendete printf für die Kompatibilität zwischen den Versionen und auch weil ich dadurch das Ausgabeformat genauer steuern kann. Danke für das/g/Tip, wusste das nicht. –