我需要在bash脚本中运行hadoop命令,它遍历amazons3上的一堆文件夹,然后将这些文件夹名写入一个txt文件,然后执行进一步的处理。但问题是,当我运行脚本时,似乎没有文件夹名被写入txt文件。我想知道是不是hadoop命令运行的时间太长,bash脚本没有等到它完成,然后继续执行进一步的进程,如果是这样的话,我怎么能让bash等到hadoop命令完成,然后再执行其他进程呢?
这是我的代码,我试了两种方法,都不起作用:
1.
listCmd="hadoop fs -ls s3n://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$S3_BUCKET/*/*/$mydate | grep s3n | awk -F' ' '{print $6}' | cut -f 4- -d / > $FILE_NAME"
echo -e "listing... $listCmd\n"
eval $listCmd
...other process ...
2.
echo -e "list the folders we want to copy into a file"
hadoop fs -ls s3n://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$S3_BUCKET/*/*/$mydate | grep s3n | awk -F' ' '{print $6}' | cut -f 4- -d / > $FILE_NAME
... other process ....
有人知道哪里不对吗?使用eval函数还是直接使用第二种方式运行hadoop命令更好
谢谢。
1条答案
按热度按时间ttygqcqt1#
我更愿意
eval
在本例中,将下一个命令附加到此命令后会更漂亮。我宁愿崩溃listCmd
分成几部分,这样你就知道没有什么不对劲了grep
,awk
或者cut
水平。eval "$listCmd"
sleep 1800 # This will sleep 1800 seconds
eval "$otherCmd"