Crontab shell脚本启动另一个脚本:删除字符错误



我想通过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"one_answers"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 }代替,但这也不起作用。有什么好办法吗?

继续评论,您在start.sh中的Bad Substitution是由于您将spaces留在braces和您的变量名称和替换之间的7行,(例如"${ 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仅用于在没有找到.jpg文件的情况下输出"nothing to do",如果不需要,只需删除所有涉及cnt的行。

很好。非常感谢!

bash start.sh代替. start.sh也很有帮助。

我在问题中更新了上面的代码

最新更新