安全退出 pig shell 命令

Posted

技术标签:

【中文标题】安全退出 pig shell 命令【英文标题】:Exit pig shell command safely 【发布时间】:2013-03-17 03:02:30 【问题描述】:

当我在 Pig 交互式 shell 环境中输入一些错误命令时,它会进入监听模式 (>>),如下所示。如何安全地退出此命令,但仍留在 pig shell 环境中?

Ctrl + C 把我带出猪壳,直到那时我失去了我的环境设置。

**grunt> Test_group = group Block2_Prep_filter by (page_visit_id as grp_page_visit_id, page_user_guid as grp_page_user_guid);
>> ;
>>
>>**

【问题讨论】:

我也面临同样的问题。我尝试了quit 命令或以Ctrl-C 结尾,但不知何故它覆盖了现有的键盘映射设置,然后我所有的backspace 都转换为^H 【参考方案1】:

我查看了猪源代码。这称为 secondary_prompt(在 PigScriptParser.jj 中找到,JavaCC 的上下文无关解析器语法文件)。在我看来,它似乎无法摆脱。我尝试了很多我在该代码中看到的东西的组合,但没有任何效果。也尝试了所有我能想到的退出类型的词,但无济于事。

当我执行 Ctrl + D 时,它退出并显示:

>> 2013-06-19 12:51:43,632 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000:
Error during parsing. Lexical error at line 83, column 0.  Encountered: <EOF> after : ""

查看 Grunt 类,此时确实如此:

parser.setInteractive(false);
return parser.parseStopOnError();

这向我表明,此时交互性已经结束。

【讨论】:

以上是关于安全退出 pig shell 命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GRUNT shell 中取消命令

Shell Trap信号管理

如何安全地提前退出 bash 脚本?

通过 PigServer API 执行 Pig Shell 命令

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

Linux安全基础:shell及一些基础命令