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

时间:2018-11-20 20:14:00

标签: bash pipe

我正在尝试将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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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