我在hdfs上有一个接受8-9参数的shell脚本。一般情况下,我可以这样做:
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,什么是处理这个问题的最好方法?
发布于 2022-01-11 13:24:13
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相当优雅)
code=$(hadoop fs -cat /dev/test/sample.sh)
bash -c "$code" bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder发布于 2022-01-11 12:47:58
bash -mode FULL将-mode和FULL参数传递给bash,而不是传递给脚本。在bash手册页面中,描述了以下选项:
-- A--指示选项的结束,并禁用进一步的选项处理。-之后的任何参数都被视为文件名和参数。.的论点相当于.
以及:
如果存在
-s选项,或者在选项处理后没有保留参数,则从标准输入读取命令。此选项允许在调用交互式shell时设置位置参数。
因此,我会引用它作为
.... | bash - --mode FULL ....根据戈登·达瓦松的评论,我们需要在这里使用-s:
.... | bash -s -- -mode FULL ....https://stackoverflow.com/questions/70666690
复制相似问题