2017-01-31 2 views
1

Versuchen, Schuppen Flucht zu tun, und das funktioniert offensichtlich nicht. Mein Parameter mit Leerzeichen ist customer und sein Wert ist NAME WITH SPACE.Bash-Befehl mit einer Shell-Skript-Variable, die sich selbst als Parameter mit Leerzeichen

chroot /sites/FOLDER1 /bin/su FOLDER2 -c "/data/batch/myScript.sh -v -g -action params -customer NAME WITH SPACE" 

Ich erhalte:

Fehler: Unbekannter Parameter MIT

las ich ein paar Fäden zu den Themen, aber keine Lösung ausmachen: https://superuser.com/questions/360966/how-do-i-use-a-bash-variable-string-containing-quotes-in-a-command http://mywiki.wooledge.org/BashFAQ/050

Versucht mit einfachen und doppelten Anführungszeichen, mit dem Speichern der Parameter in einer Var iable etc aber keine Würfel.

Wenn ich

chroot /sites/FOLDER1 /bin/su FOLDER2 -c '/data/batch/myScript.sh -v -g -action params -customer 'NAME WITH SPACE'' 

Es funktioniert ein wenig besser, da ich nicht den unbekannten Parameter bekommen Sie aber es dauert nur Name als Parameter und ignorieren, was nach dem Raum

Antwort

3

su -c "script-text" startet eine separate Schale Interpreter, der script-text als Code analysiert. Folglich muss dieser Text in einer sicheren Weise maskiert werden. printf '%q' tut dies für Bash (und wird völlig robust sein, wenn Ihre /bin/sh ist ein Symlink zu bash).

Das heißt:

printf -v cmd '%q ' /data/batch/myScript.sh -v -g -action params -customer "NAME WITH SPACE" 
chroot /sites/FOLDER1 /bin/su FOLDER2 -c "$cmd" 

Wenn Ihre /bin/shnicht ist von bash zur Verfügung gestellt, dann sollten Sie eine alternative Implementierung berücksichtigen rein POSIX-konforme Ausgabe, wie die von dem Python pipes.quote() bereitgestellt Erzeugen Bibliotheksfunktion:

pyquote() { 
    python -c 'import pipes, sys; print " ".join(pipes.quote(a) for a in sys.argv[1:])' "[email protected]" 
} 

cmd=$(pyquote /data/batch/myScript.sh -v -g -action params -customer "NAME WITH SPACE") 
chroot /sites/FOLDER1 /bin/su FOLDER2 -c "$cmd" 
+0

Danke, aber ich bekomme immer noch 'Unbekannter Parameter MIT' – TheBakker

+0

'deklarieren - cmd =" ​​/ data/batch/myScript.sh -v -g -action params -customer NAME \\ WITH \\ SPACE "' – TheBakker

+0

Ja 'chroot/sites/FOLDER1/bin/su FOLDER2 -c" $ cmd "' – TheBakker

Verwandte Themen