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