我正在尝试将bash脚本组合在一起,以使用mymemmory api来翻译文本。我希望它能够通过管道传输来翻译单行和多行。
到目前为止(我正在使用jq),这是脚本(mytrans
):
#!/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
我做错了什么?
答案 0 :(得分:1)
在函数translate_line()
的开头,您应该声明local
或初始化totranslate=""
,以免每次调用时它都增加。