2016-09-01 4 views
2

Ich kämpfe enthalten machen finden -exec meine Variable übernehmen, die mit Zitaten einen Befehl enthält ...finden -exec mit einer Variablen ein Co-Design-Befehl mit Anführungszeichen

signpath="codesign --force --deep --verbose --sign \"My Sign ID\"" 

Dann egal, welche Version von find ich versuche, ich kann nicht gelingen richtig die $ signpath zu exec:

find "$pathtoframeworks" -type f -not -name '*.*' -exec "$signpath {}" \; 
#the above results in codesign --force --deep --verbose --sign "My Sign ID" My App.app/Contents/Frameworks/MyFramework.framework/Versions/5/MyFramework: No such file or directory 

find "$pathtoframeworks" -type f -not -name '*.*' -exec $signpath "{}" \; 
#the above results in "My: no identity found 

find "$pathtoframeworks" -type f -not -name '*.*' -exec "$signpath" {} \; 
#the above results in codesign --force --deep --verbose --sign "My Sign ID": No such file or directory 

finden -exec scheint mit Anführungszeichen innerhalb von Variablen zu tun Probleme zu haben ... Was kann ich tun? :/

Antwort

2

Try zitiert separat: Befehlszeile in einem Array zu speichern

find "$pathtoframeworks" -type f -not -name '*.*' -exec "$signpath" '{}' \; 

Obwohl besser und sicherer ist:

signpath=(codesign --force --deep --verbose --sign "My Sign ID") 

Und verwenden Sie es als:

find "$pathtoframeworks" -type f -not -name '*.*' -exec "${signpath[@]}" '{}' \; 
+0

leider die 2 obigen Szenarien ergeben dasselbe wie mein drittes Szenario ... – user3767622

+2

Die Array-Version sollte funktionieren. Escaped-Anführungszeichen funktionieren nicht, da "-exec" keine Shell zum Ausführen des Befehls verwendet, also werden Anführungszeichen nicht verarbeitet. – Barmar

+0

@ user3767622: Funktioniert 'codesign --force --deep --verbose --zeichen" My Sign ID "'My App.app/Contents/Frameworks/MyFramework.framework/Versiones/5/MyFramework'' Befehl direkt aus dem Befehl Linie? – anubhava

Verwandte Themen