管道输入到bash脚本(用于翻译文本)



我正在尝试将bash脚本组合在一起,以使用mymemmoryAPI来翻译文本。我希望它能够通过吸管翻译单行和多行。

这是到目前为止的脚本(mytrans((我使用的是jq(:

#!/bin/bash
key=apikey
mail=themail
translate_line()
{
for x in "$@"; do
totranslate="$totranslate%20$x"
done
totranslate=${totranslate:3}
url="https://api.mymemory.translated.net/get?q=$totranslate&langpair=en-US%7Ces-ES&of=json&key=$thekey&de=$mail"
translated_text=$(curl -s $url | jq-linux64 '.responseData.translatedText' | sed -e 's/^"//' -e 's/"$//')
echo $translated_text
}
if [ -p /dev/stdin ]; then
while IFS= read line; do
echo $line
translate_line $line
done
else
translate_line "$@"
fi

如果我在一条简单的线路上运行它,或者如果我用管道传输一条简单线路,它会很好地工作。问题出在多条线路上。示例:

$mytrans hello world
hello world
hola mundo
$echo bye | mytrans
bye
adios
$echo hello world > dd
$echo bye >> dd
$cat dd | mytrans
hello world
hola mundo
bye
lo bye mundo

我做错了什么?

在函数translate_line()的开头,您应该声明local或初始化totranslate="",这样它就不会在每次调用时增加。

最新更新