首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将内联参数传递给hdfs中保存的shell脚本

将内联参数传递给hdfs中保存的shell脚本
EN

Stack Overflow用户
提问于 2022-01-11 12:18:59
回答 2查看 161关注 0票数 1

我在hdfs上有一个接受8-9参数的shell脚本。一般情况下,我可以这样做:

代码语言:javascript
复制
sh sample.sh -mode FULL -status DELETE -id 1456 -region AP -path </path/to/filepath>

我尝试了hadoop fs -cat /dev/test/sample.sh | exec bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder,尽管我传递了这些参数,它们不被读取,脚本在没有参数的情况下执行。抛出错误作为No such file or directory,什么是处理这个问题的最好方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-11 13:24:13

代码语言:javascript
复制
bash -c "$(hadoop fs -cat /dev/test/sample.sh)" bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder

也能起作用。

如果存在

-c选项,则从第一个非选项参数command_string读取命令。如果在command_string之后有参数,则第一个参数分配给$0,其余的参数都分配给位置参数。分配给$0设置外壳的名称,该名称用于警告和错误消息。

也许更容易读(尽管bash -s相当优雅)

代码语言:javascript
复制
code=$(hadoop fs -cat /dev/test/sample.sh)
bash -c "$code" bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder
票数 1
EN

Stack Overflow用户

发布于 2022-01-11 12:47:58

bash -mode FULL-modeFULL参数传递给bash,而不是传递给脚本。在bash手册页面中,描述了以下选项:

-- A --指示选项的结束,并禁用进一步的选项处理。-之后的任何参数都被视为文件名和参数。.的论点相当于.

以及:

如果存在

-s选项,或者在选项处理后没有保留参数,则从标准输入读取命令。此选项允许在调用交互式shell时设置位置参数。

因此,我会引用它作为

代码语言:javascript
复制
.... | bash - --mode FULL ....

根据戈登·达瓦松的评论,我们需要在这里使用-s

代码语言:javascript
复制
.... | bash -s -- -mode FULL ....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70666690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档