我想通过crontab运行一个shell脚本,然后运行另一个shell脚本,该脚本检查某个文件夹中的某些文件并为每个文件创建一个目录。 第一个脚本" my_crontab.sh"看起来像这样:
#!/bin/bash
cd /home/myusername/myfolder
python mypythonscript.py
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myusername/myfolder
bash start.sh
Crontab执行" my_crontab.sh"和" start.sh"也被调用(我知道来自crontab日志文件)
这就是" start.sh"看起来像:
#!/bin/bash
echo "start.sh started"
if [ $(find -maxdepth 1 -type f | wc -l) -ne 0 ];
then
for i in *.jpg
do
folder="${i/.jpg/}"
mkdir ../folders/$folder
done
else
echo "nothing to do"
fi
现在我收到了错误:
/bin/sh: 7: /home/myusername/myfolder/start.sh: Bad substitution
我已经尝试了folder=${ i:0:-4 }
,但这也无效。
任何想法如何解决它?
答案 0 :(得分:0)
继续发表评论,导致Bad Substitution
start.sh
spaces
因7
与您的变量名称之间的braces
排在"${ i/.jpg/ }"
之间替换,(例如"${i/.jpg/}"
应该是4
。行-ne
是有问题的,因为wc -l
期望双方都有整数表达式,并且不能保证命令替换符合(它应该使用start.sh
)但不保证。您可以更好地撰写类似于#!/bin/bash
echo "start.sh started"
declare -i cnt=0;
while read -r fname
do
folder="${fname%.jpg}"
mkdir -p "../folders/$folder"
((cnt++))
done < <(find . -maxdepth 1 -type f -name "*.jpg")
[ "$cnt" -eq '0' ] && echo "nothing to do"
的内容:
cnt
注意:如果找不到"nothing to do"
个文件,计数器.jpg
仅用于输出cnt
,如果不需要,只需删除引用/etc/mysql/my.cnf
的所有行。
答案 1 :(得分:0)
它还有助于使用bash start.sh
代替. start.sh
。
我在我的问题中更新了上面的代码。