在 pig 脚本中执行 shell 命令时出错

Posted

技术标签:

【中文标题】在 pig 脚本中执行 shell 命令时出错【英文标题】:Error executing shell command in pig script 【发布时间】:2012-07-20 21:00:49 【问题描述】:

我有一个猪脚本,一开始我想从某个日期生成过去 7 天的日期字符串(后来用于检索那些日子的日志文件)。 我试图用这条线做到这一点: %声明 CMD7 input= ; for i in 1..6; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input

我收到一个错误: " 错误 2999: 意外的内部错误。执行 shell 命令时出错: input= ; for i in 1..6; do d=$(date -d "2012-07-10 -i days" "+%Y-% m-%d"); input="$input$d,"; done;. 命令退出,退出代码为 127" 但是 shell 命令在 pig 之外运行得非常好。我真的不确定这里出了什么问题。

谢谢!

【问题讨论】:

【参考方案1】:

我有一个可行的解决方案,但不像你想要的那样精简,基本上我没有设法让 Pig 在声明中执行复杂的 shell 语句。

我首先编写了一个 shell 脚本(我们称之为 6-days-back-from.sh):

#!/bin/bash
DATE=$1
for i in 1..6; do d=$( date -d "$DATE -$i days" +%F ) ; echo -n "$d "; done

然后是一个猪脚本如下(我们称之为days.pig):

%declare my_date `./6-days-back-from.sh $DATE`
A = LOAD 'dual' USING PigStorage();
B = FOREACH A GENERATE '$my_date';
DUMP B

请注意,dual 是一个包含单行文本的文本文件的目录,用于显示我们的变量

我将脚本调用如下:

pig -x local -param DATE="2012-08-03" days.pig

得到以下输出:

((2012-08-02),(2012-08-01),(2012-07-31),(2012-07-30),(2012-07-29),(2012-07-28))

【讨论】:

以上是关于在 pig 脚本中执行 shell 命令时出错的主要内容,如果未能解决你的问题,请参考以下文章

Shell命令的退出状态及错误检查

shell脚本中source文件出错

linux shell 命令定义和使用数组出错

通过 PigServer API 执行 Pig Shell 命令

【exec】shell脚本中的 exec 命令

shell脚本中的 exec 命令