我的shell脚本在给定目录中循环执行python脚本。我希望能够忽略特定文件export_config.yaml。当前在for循环中使用它,并在终端上打印出错误,我希望它完全忽略此文件。
yamldir=$1
for yaml in ${yamldir}/*.yaml; do
if [ "$yaml" != "export_config.yaml" ]; then
echo "Running export for $yaml file...";
python jsonvalid.py -p ${yamldir}/export_config.yaml -e $yaml -d ${endDate}
wait
fi
完成
答案 0 :(得分:2)
您在if
语句中进行的字符串比较不匹配export_config.yaml
,因为对于for
循环的每次迭代,您都分配了整个相对文件路径(即“ $yamldir/export_config.yaml
” ”,而不仅仅是“ export_config.yaml
”。
第一个选择:更改您的$yaml
语句以反映出该问题可以解决您的问题:
if
另一个选项:使用if [ "$yaml" != "${yamldir}/export_config.yaml" ]; then
#etc...
仅捕获终端路径字符串(即文件名)。
basename
第三种选择:您可以通过执行for yaml in ${yamldir}/*.yaml; do
yaml=$(basename $yaml)
if [ "$yaml" != "export_config.yaml" ]; then
#etc...
这样的循环来完全消除if
语句:
for
通过将for yaml in $(ls ${yamldir}/*.yaml | grep -v "export_config.yaml"); do
的输出传递到ls
,您可以从目录列表的第一位排除包括grep -v
的任何行。