Ho uno script di shell che chiamo che utilizza osascript
e che osascript
chiama uno script di shell e passa una variabile che ho impostato nello script di shell originale. Non so come passare quella variabile dal codice di scrittura allo script di shell.Passa da variabile script di shell a applescript
Come posso passare una variabile dallo script di shell a applescript allo script di shell ...?
Fammi sapere se non ho senso.
i=0
for line in $(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'); do
UDID=${line}
echo $UDID
#i=$(($i+1))
sleep 1
osascript -e 'tell application "Terminal" to activate' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e 'tell application "Terminal" to do script "cd '$current_dir'" in selected tab of the front window' \
-e 'tell application "Terminal" to do script "./script.sh ip_address '${#UDID}' &" in selected tab of the front window'
done
Questo è un cattivo consiglio. Oltre a essere inutilmente goffo, non disinfetta il testo inserito, quindi non è né robusto né sicuro, ad es. 'text = 'Bob dice" ciao "'' causerà a AS un errore di sintassi dovuto a virgolette senza escape. Non usare mai il codice munging se esiste una soluzione migliore, cosa che fa: come ha detto Lauri Ranta, definire un gestore 'run' esplicito e passare le stringhe tramite ARGV. Vedi http://stackoverflow.com/questions/16966117/bash-combining-variables-to-form-a-command-sent-to-applescript-using-the-osascr/16977401#16977401 per ulteriori dettagli. – foo
@foo Hai ragione, l'uso di 'on run argv' è" more "corretto. La mia non è una soluzione "perfetta", ma l'ho usata io stesso molte volte senza problemi, è semplice e utilizzabile per molti script ... – jm666
La tua è una soluzione _buggy_. Se $ text contiene virgolette doppie o caratteri di backslash, il codice AS causerà errori o, peggio, comportamenti non previsti. Se è necessario utilizzare il codice munging, è necessario _ disinfettare i propri input. per esempio. Google "SQL injection attack" per capire perché "funziona per me" non è una risposta appropriata quando qualcuno sottolinea questo difetto. – foo