有没有办法在AppleScript中输入shell脚本的响应?

时间:2015-01-16 08:47:35

标签: applescript

有没有办法响应要求AppleScript内部信息的shell脚本?

我有一个脚本运行一个命令,在终端中运行时会询问两个问题。

我已经知道了答案,我必须这样做一千次。有没有办法可以输入这些响应,所以当shell脚本提示我它们时它会继续这个过程吗?

示例:

on run {email}
    set result to do shell script "myprocess \"" & email & "\""
    keystroke "file.png" + "enter" 
    keystroke "y" + "enter"
    return result
end run

我得到的错误是:

error "Enter the file name to save:"

...这是要求我输入值的终端中的提示。

注意:这与this问题非常相似,但我不想打开终端窗口。我想留在AppleScript。

2 个答案:

答案 0 :(得分:0)

是和否。虽然do shell script不允许您与流程进行交互,但它看起来并不像您真正需要的那样。由于您有已知的回复,因此您可以将回复放在文件中,并将stdin重定向到myprocess

这样的事情:

do shell script "myprocess \"" & email & "\" < responses.txt"

其中responses.txt是包含以下内容的文件:

file.png
y

答案 1 :(得分:0)

您可以创建&#34;期待&#34; bash脚本,如果您必须响应shell命令中的提示和内容。你可以在applescript里面做到这一点。

这是一个例子。假设我想通过SSH登录计算机,运行几个命令,然后退出。我知道在命令行我必须首先ssh到机器的IP地址,然后我必须等待机器问我密码,然后我必须输入密码,然后我再等一下等等。我可以用AppleScript中的expect脚本来完成,就像下面的脚本一样。注意这一行:

expect \\\"password:\\\"

是我等待密码请求的地方,期待&#34;密码:&#34;命令行提示符。收到该提示后,我发送密码:

send \\\"$PASS\\r\\\"

您可以看到我然后发出一些其他ssh命令并最终退出脚本。所以希望这会让你知道如何编写代码。你可以谷歌更多关于&#34;期待&#34;脚本。

要解释反斜杠...在bash脚本中,我们会有\&#34;在expect命令中逃避报价。因为我们已经使用了AppleScript,所以我们必须逃避这些事情,因为它们对于AppleScript具有特殊的意义,所以它变成了\\&#34;这是\发送一个反斜杠和\&#34;发送报价。

祝你好运。

set shScript to "#!/bin/bash

HOST=192.168.1.xxx
USER=username
PASS=passwrd
PROMPT=#

expect -c \"
spawn ssh $USER@$HOST
expect \\\"password:\\\"
send \\\"$PASS\\r\\\"
expect \\\"$PROMPT\\\"
send \\\"cd /\\r\\\"
expect \\\"$PROMPT\\\"
send \\\"ls -al\\r\\\"
expect \\\"$PROMPT\\\"
send \\\"exit\\r\\\"
\"
"

do shell script "sh -c " & quoted form of shScript