执行 bash 脚本循环而不退出错误
Execute bash script loop without exit on error
我想要做的是 运行 为一个文件夹中的每个数据集执行几个 hadoop 作业。我正在使用如下循环:
hdfs dfs -ls | grep -o '[0-9]*x[0-9]*$'|while read line;
do
echo "Operator: Spark KMeans, Dataset: $line"
./bspark.sh spark_kmeans $line 6 20
sleep 30s
done
部分作业可能会失败。出现错误是否可以继续下一行?
我能想到的一些事情:
- 您的
while
循环正在使用 STDIN。我想知道 bspark.sh
是否也在使用 STDIN 并且可能正在使用您的输入。
bspark.sh
是否以某种方式终止了您的程序?
- 你的 while 循环解析是按照你的想法做的吗?
您可以尝试几件事:
在您的 bspark.sh
行前面放一个 echo
。而不是实际执行 bspark.sh
查看命令的样子。这会让您了解脚本实际在做什么。
使用 set -xv
打开 shell 调试。 -v
显示 shell 插入前的命令行,-x
显示 shell 插入后的命令行。您可以将 $PS4
设置为 $LINENO>
以在打印调试信息时查看行号。让您了解错误发生的位置。
set +xv
关闭调试。我发现通过我的 shell 脚本将它们添加到不同的地方以查看发生了什么是很有用的。
我想要做的是 运行 为一个文件夹中的每个数据集执行几个 hadoop 作业。我正在使用如下循环:
hdfs dfs -ls | grep -o '[0-9]*x[0-9]*$'|while read line;
do
echo "Operator: Spark KMeans, Dataset: $line"
./bspark.sh spark_kmeans $line 6 20
sleep 30s
done
部分作业可能会失败。出现错误是否可以继续下一行?
我能想到的一些事情:
- 您的
while
循环正在使用 STDIN。我想知道bspark.sh
是否也在使用 STDIN 并且可能正在使用您的输入。 bspark.sh
是否以某种方式终止了您的程序?- 你的 while 循环解析是按照你的想法做的吗?
您可以尝试几件事:
在您的
bspark.sh
行前面放一个echo
。而不是实际执行bspark.sh
查看命令的样子。这会让您了解脚本实际在做什么。使用
set -xv
打开 shell 调试。-v
显示 shell 插入前的命令行,-x
显示 shell 插入后的命令行。您可以将$PS4
设置为$LINENO>
以在打印调试信息时查看行号。让您了解错误发生的位置。set +xv
关闭调试。我发现通过我的 shell 脚本将它们添加到不同的地方以查看发生了什么是很有用的。