Передать переменную из оболочки script в applescript
У меня есть оболочка script, которую я вызываю, которая использует osascript
, и что osascript
вызывает оболочку script и передает переменную, которую я установил в исходной оболочке script. Я не знаю, как передать эту переменную из applescript в оболочку script.
Как передать переменную из оболочки script в applescript в оболочку script...?
Сообщите мне, если я не имею смысла.
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
Ответы
Ответ 1
Переменные оболочки не расширяются внутри одинарных кавычек. Когда вам нужно передать переменную оболочки в osascript
, вам нужно использовать двойные кавычки ""
. Проблема в том, что вы должны избегать двойных кавычек, необходимых внутри osascript, например:
script
say "Hello" using "Alex"
вам нужны кавычки escape
text="Hello"
osascript -e "say \"$text\" using \"Alex\""
Это не очень читаемо, поэтому гораздо лучше использовать функцию bash heredoc
, например
text="Hello world"
osascript <<EOF
say "$text" using "Alex"
EOF
И вы можете написать многострочный script внутри для свободного, это намного лучше, чем использование нескольких -e
args...
Ответ 2
Вы также можете использовать обработчик запуска или экспорт:
osascript -e 'on run argv
item 1 of argv
end run' aa
osascript -e 'on run argv
item 1 of argv
end run' -- -aa
osascript - -aa <<'END' 2> /dev/null
on run {a}
a
end run
END
export v=1
osascript -e 'system attribute "v"'
Я не знаю, как получить STDIN. on run {input, arguments}
работает только в Automator.