将变量从shell脚本传递到applescript

问题描述 投票:0回答:3

我有一个 shell 脚本,我称之为使用

osascript
,并且
osascript
调用 shell 脚本并传入我在原始 shell 脚本中设置的变量。我不知道如何将该变量从 applescript 传递到 shell 脚本。

如何将变量从 shell 脚本传递到 applescript 再到 shell 脚本...?

如果我不明白请告诉我。

 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
bash shell applescript osascript
3个回答
15
投票

Shell 变量不在单引号内扩展。当您想要将 shell 变量传递给

osascript
时,您需要使用双
""
引号。问题是,您必须转义 osascript 内所需的双引号,例如:

剧本

say "Hello" using "Alex"

你需要转义引号

text="Hello"
osascript -e "say \"$text\" using \"Alex\""

这不太可读,因此最好使用 bash 的

heredoc
功能,例如

text="Hello world"
osascript <<EOF
say "$text" using "Alex"
EOF

而且你可以免费在里面编写多行脚本,这比使用多个

-e
参数要好得多...


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。


0
投票

以下是对我有用的。

pathToRepo
是变量,
osascript
传递到打开的终端,然后
cd
进入正确的目录。

pathToRepo="/Users/<YOUR_MAC_NAME>/Documents/<REPO_NAME>"

osascript - "$pathToRepo" <<EOF
    on run argv -- argv is a list of strings
        tell application "Terminal"
            do script ("cd " & quoted form of item 1 of argv & " && npm start")
        end tell
    end run
EOF

来源/参考:https://stackoverflow.com/a/67413043/6217734

© www.soinside.com 2019 - 2024. All rights reserved.