Debian 11 Bullseye中使用“sed”的Bash脚本可以从命令行运行,但不能作为cron运行
嗨,我正在运行Debian GNU/Linux 11 (bullseye) Linux 5.15.84-v8+ #1613 SMP PREEMPT Thu Jan 5 12:03:08 GMT 2023 aarch64 GNU/Linux
在我的设置中,我有两个bash脚本:
一个不同的脚本一天24小时每分钟不停地用JPEG文件填充我的文件夹,这是一个cronjob,运行完美。
当从命令行运行/home/myuser下面的脚本运行完美,并创建一个文件,列出所有JPEG文件在myfolder之间的开始时间和完成时间
例如文件名2023-03-05_1014.jpg
例如,从命令行myfolder/2023-03-05_1014.jpg创建的output.txt
#!/bin/bash
cd /home/myuser/
current_date=$(date +%F)
time_start=2023-03-05_0900
time_finish=2023-03-05_1700
ls myfolder/"$current_date"_*.jpg | sed -n "/myfolder\/$time_start/, /myfolder\/$time_finish/p" > output.txt
以用户myuser(非root)身份作为cronjob运行时00 22 * * * /home/myuser/create_jpg_list.sh 2>&1
output.txt将列出myfolder中的每个文件,其中列出了从0000到2359的每个JPEG文件。也就是说,sed命令中的变量似乎没有被解释。
例如,对于从cronjob myfolder/2023-03-05_2302.jpg
创建的output.txt,该行不应显示在output.txt中,因为它超出了上午9点到下午5点的时间范围
我已经在网上搜索过了,有一些线程,如下面的链接(仅举几例)处理这种情况,但唉https://unix.stackexchange.com/questions/614759/sed-doesnt-work-under-cronhttps://askubuntu.com/questions/524726/not-able-to-run-sed-on-bash-scripthttps://unix.stackexchange.com/questions/662851/why-this-script-doesnt-work-from-cron-while-it-works-when-invoke-from-my-shellhttps://www.linuxquestions.org/questions/linux-newbie-8/sed-not-working-from-cron-706865/
欢迎任何反馈,因为我不知道还能尝试什么。
1条答案
按热度按时间ukqbszuj1#
sed地址的开始/结束条件为“categorical"。也就是说,它是固定的at first match。因此,虽然这对于开始条件可以正常工作,捕获多个匹配项中的第一个,但对于结束条件不起作用,只提供多个匹配项中的第一个。
此外,地址上没有“比较”,因此不能使用1701作为结束条件的规范。
awk是这种细粒度控制的更好选择,同时在某些类型的匹配上提供了更大的灵活性。
下面的脚本包含一个演示模式(无需指定命令行参数),它将演示原始**sed地址匹配和awk**方法的输出,以给予您想要的结果。
逻辑演示脚本: