有没有办法响应要求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。
答案 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