Applescript - 如何从终端运行单个bash命令并在继续之前等待响应?

时间:2015-09-02 14:21:51

标签: bash terminal applescript

我有一个modelinfo.sh文件,如果我在终端中运行它回声/将结果保存到TXT文件。

要从终端I执行此文件,请使用命令:

./modelinfo.sh -s C8QH74G6DP11

使用此命令可以保存给定序列号的结果:C8QH74G6DP11

我需要获得5000个连续剧的报告,所以我认为AppleScript可以帮助我吗?

我用AppleScript编写了这段代码:

tell application "Terminal"
    do script ("./modelinfo.sh -s C8TJ14JWDP11") in window 1
    do script ("./modelinfo.sh -s C8QH74G6DP12") in window 1
    do script ("./modelinfo.sh -s C8QKGFWSDP13") in window 1
    do script ("./modelinfo.sh -s C8QKFR5FDP14") in window 1
end tell

使用此代码,我的IP被阻止,我只获得第一个序列号的报告。

我也尝试过:

on delay duration
    set endTime to (current date) + duration
    repeat while (current date) is less than endTime
        tell AppleScript to delay duration
    end repeat
end delay
tell application "Terminal"
    do script ("./modelinfo.sh -s C8TJ14JWDP11") in window 1
    delay 20
    do script ("./modelinfo.sh -s C8QH74G6DP12") in window 1
    delay 20
    do script ("./modelinfo.sh -s C8QKGFWSDP13") in window 1
    delay 20
    do script ("./modelinfo.sh -s C8QKFR5FDP14") in window 1
end tell

但是这段代码也无济于事。

最后我试过了:

tell application "Terminal"
    do script ("./modelinfo.sh -s C8TJ14JWDP11") in window 1
end tell

这个最后一个脚本我可以根据需要多次运行,而且我总是收到报告而不会阻止我的IP。

看起来Applescript会立即运行所有4个连续剧,即使我被IP封锁了? 因为我可以多次运行单次检查而不会被阻止。

任何人都可以帮助并指出我正确的方向吗?

Applescript有可能吗? 或者我可以创建一个新的bash文件,它可以逐个运行所有5000个命令吗?

谢谢

2 个答案:

答案 0 :(得分:2)

更新了答案

如果您想计算线条并指示进度,请用以下代码替换下面的代码:

#!/bin/bash
declare -i total
total=$(wc -l <sn.txt)     # count the lines in sn.txt
i=1
while read sn; do
   echo "Fetching $sn ($i of $total)"
   ./modelinfo.sh -s "$sn"
   ((i++))
done < sn.txt

原始答案

不知道为什么有人会使用Applescript - 这显然是一个从终端运行的简单bash脚本。

假设您的序列号保存在名为sn.txt的文件中,如下所示:

C8QH74G6DP11
C8TJ14JWDP11
C8QH74G6DP12
C8QKGFWSDP13

然后,您将以下内容保存在HOME目录中名为fetch的文件中。它一次读取一个序列号并获取它们。

#!/bin/bash
while read sn; do
   echo Fetching $sn...
   ./modelinfo.sh -s "$sn"
done < sn.txt

然后你会进入终端并键入以下内容以使其可执行:

chmod +x fetch

然后您可以通过输入

来运行它
./fetch

您可以按住Command并点击空格键然后键入Ter来启动终端,并且Spotlight会猜测您的意思是终端,然后您只需点击Enter即可实际启动它。

答案 1 :(得分:0)

嗯,这是Applescript中使用您正在尝试的方法的常用方法。

property serialList: {"C8TJ14JWDP11", "C8QH74G6DP12", "C8QKGFWSDP13", "C8QKFR5FDP14"}

tell application "Terminal"
repeat with aSerial in serialList
    do script ("./modelinfo.sh -s " & aSerial) in window 1
    delay 20
end

这应该有效。但是,终端窗口的状态需要完成该过程并准备好下次调用才能工作,因此延迟20可能过于简单。将上面的代码放在try块中,以查看是否有错误。

try
-- above code goes here
on error err
display dialog err
end try

另一种方法是将shell命令直接包含在Applescript中,而无需通过终端应用程序,使用

do shell script

您必须发布modelinfo.sh文件的内容才能了解这种可能性。