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

有没有办法在AppleScript中输入shell脚本的响应?,applescript,Applescript,有没有一种方法可以响应在AppleScript中请求信息的shell脚本 我有一个脚本,它运行一个命令,在终端中运行时会问两个问题 我已经知道答案了,我必须做上千次。是否有一种方法可以输入这些响应,以便在shell脚本提示我输入响应时继续该过程 例如: on run {email} set result to do shell script "myprocess \"" & email & "\"" keystroke "file.png" + "enter"

有没有一种方法可以响应在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:"
…这是终端中要求我键入值的提示


注意:这与问题非常相似,但我不想打开终端窗口。我想继续使用AppleScript。

是和否。虽然
do shell script
不允许您与流程交互,但看起来您并不需要这样做。因为您有一个已知的响应,所以可以将响应放在一个文件中,并将
stdin
重定向到
myprocess

大概是这样的:

do shell script "myprocess \"" & email & "\" < responses.txt"
如果必须响应shell命令中的提示和内容,则可以创建“expect”bash脚本。您可以在applescript内部执行此操作

这里有一个例子。假设我想通过SSH登录到一台计算机,运行几个命令,然后退出。我知道在命令行中,我必须首先ssh进入机器的IP地址,然后我必须等待机器向我请求密码,然后我必须输入密码,然后我再次等待,等等。我可以使用applescript内部的expect脚本来实现这一点,如下脚本所示。请注意,行:

expect \\\"password:\\\"
是我等待密码请求的地方,需要“password:”命令行提示。收到提示后,我会发送密码,其中包含:

send \\\"$PASS\\r\\\"
您可以看到,我随后发出了一些其他ssh命令,并最终退出了脚本。因此,希望这能让您了解如何编写代码。你可以在谷歌上搜索更多关于“expect”脚本的想法

为了解释背后的伤口。。。在bash脚本中,expect命令中有\“转义引号。因为我们在applescript中,我们必须转义这些内容,因为它们对applescript有特殊的意义,所以它变成\“发送反斜杠,发送引号”

祝你好运

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

因此,每个响应都在一个单独的行上?是否有返回命令的响应?有些是可选的,只要求您按enter键继续。每行末尾的换行是您提供的输入的一部分。因此,文件中的空行对应于按just enter键。
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