我有一个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个命令吗?
谢谢
答案 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文件的内容才能了解这种可能性。