我在终端中运行以下行:
say "hello, this is the computer talking" --interactive
当我运行此命令时,计算机会在引号中说出单词并突出显示单词。我想做的是获得每个口语的时间。例如:
我想知道是否有任何方法可以编写一个与该行输出交互的bash脚本。
这是一个几乎完全符合你想要的Zsh脚本。
#!/bin/zsh
zmodload zsh/datetime
say --interactive "hello, this is the computer talking" | {
counter=0
while IFS= read -r -d $'\r' line; do
(( counter++ )) || continue # first line in the output of `say --interactive` suppresses the cursor; discard this line
timestamp=$EPOCHREALTIME
(( counter == 2 )) && offset=$timestamp # set the timestamp of the actual first line at the offset
(( timestamp -= offset ))
printf '%05.2f %s\n' $timestamp ${${line%$'\e[m'*}#*$'\e[7m'}
done
}
样本输出:
00.00 hello
00.26 ,
00.52 this
00.65 is
00.78 the
01.36 computer
02.04 talking
如果你想将它转换为bash,那么浮点运算需要在bc
这样的外部命令中完成,并且要获得精确的时间戳,你需要coreutils date
(timestamp=$(gdate +%s.%N)
)。
顺便说一句,如果您不想看到逗号,可以将其过滤掉。