[求助]请教一个文本替换问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

[求助]请教一个文本替换问题

#1

帖子 chinaz » 2019-11-15 13:26

有a和b两个文件,a文件不定时更新内容。通过crontab计划任务每隔几分钟执行b文件。

cat a
http://news.baidu.com/

cat b
gnome-web-photo --mode=photo -t 30 -w 1440 --force ppp /home/user/picture/x.png

请用sed或者awk等实现一条命令将b文件里面的ppp替换成a文件里面的内容,命令执行完后的效果应该是:
gnome-web-photo --mode=photo -t 30 -w 1440 --force http://news.baidu.com/ /home/user/picture/x.png

因为需要在crontab计划任务中调用,所以无法识别变量,在网上搜了好久都是带变量的实现方法,请教能否不使用变量直接一行指令解决问题(或者两行三行也行)?提前感谢!
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#2

帖子 astolia » 2019-11-15 16:19

chinaz 写了: 2019-11-15 13:26因为需要在crontab计划任务中调用,所以无法识别变量
???怎么就不能识别变量了???


最简单的方式就是把a的内容放到命令行里面去

代码: 全选

gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(cat /path/to/a)" /home/user/picture/x.png
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#3

帖子 chinaz » 2019-11-15 16:48

astolia 写了: 2019-11-15 16:19
chinaz 写了: 2019-11-15 13:26因为需要在crontab计划任务中调用,所以无法识别变量
???怎么就不能识别变量了???


最简单的方式就是把a的内容放到命令行里面去

代码: 全选

gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(cat /path/to/a)" /home/user/picture/x.png
谢谢楼上的帮助。试过了,这样手动运行没有问题,但是放进crontab -e里面,就不执行,别的不含变量的计划任务都正常执行。
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#4

帖子 astolia » 2019-11-15 17:01

那你看过crontab的报错信息没有?
安装本地邮件服务,sudo apt install dma bsd-mailx,然后用mail打开邮箱查看报错信息
我觉得原因还是环境变量不足,特别是DISPLAY
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#5

帖子 chinaz » 2019-11-15 17:14

syslog里面循环显示下面的信息,没找到其他相关日志。。。
Nov 15 17:12:01 print CRON[8606]: (user) CMD (/usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png)
Nov 15 17:12:01 print cron[7000]: Please install an MTA on this system if you want to use sendmail!
Nov 15 17:12:01 print CRON[8604]: (user) MAIL (mailed 242 bytes of output but got status 0x00ff from MTA#012)
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#6

帖子 astolia » 2019-11-15 17:17

我上面第二行已经跟你说了怎么看crontab的报错信息,就怕你不知道。你还跑去翻syslog。
而且syslog里也说了“Please install an MTA on this system”
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#7

帖子 chinaz » 2019-11-15 17:27

mail中就只是不停显示下面的内容:
U606 user Fri Nov 15 17:23 17/531 *** SECURITY information for print ***
U607 root Fri Nov 15 17:23 25/964 Cron <user@print> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png
U608 root Fri Nov 15 17:24 25/968 Cron <user@print> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png
U609 root Fri Nov 15 17:25 25/968 Cron <user@print> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png
>N610 root Fri Nov 15 17:26 23/957 Cron <user@print> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png
&
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#8

帖子 astolia » 2019-11-15 17:44

astolia 写了: 2019-11-15 17:01 用mail打开邮箱查看报错信息
运行mail只是打开了邮箱,具体报错信息还需要你打开邮件才能看到。
你运行mail后最上面肯定有一句“Type ? for help”,不会用mail看邮件的话就输个?看一下帮助呗
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#9

帖子 chinaz » 2019-11-15 21:03

>N607 root Fri Nov 15 21:03 23/911 Cron <user@debian> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture
&
Message 607:
From user@debian Fri Nov 15 21:03:01 2019
From: root (Cron Daemon)
To: user
Subject: Cron <user@debian> /usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force "$(more /home/user/picture/picture.txt)" /home/user/picture/aaa.png
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
Date: Fri, 15 Nov 2019 21:03:01 +0800

Unable to init server: M-fM^W\240M-fM-3M^UM-hM-?M^^M-fM^NM-%M-oM-<M^ZM-fM^KM^RM-gM-;M^]M-hM-?M^^M-fM^NM-%
M-fM^W\240M-fM-3M^UM-fM^IM^SM-eM-<M^@M-fM^XM->M-gM-$M-:M-oM-<M^Z
M-gM^TM-(M-fM-3M^UM-oM-<M^Zgnome-web-photo [--mode=photo|thumbnail|print] [...]
Usage: gnome-web-photo [-c CSSFILE] [-d DELAY] [-t TIMEOUT] [--force] [-w WIDTH] [--file] URI|FILE OUTFILE
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#10

帖子 astolia » 2019-11-15 22:56

这不很明显了吗?根本就和$()没关系
cron运行时只有4个环境变量SHELL,HOME,PATH,LOGNAME。导致gnome-web-photo运行时连不到xserver。先把DISPLAY补上再说,如果还缺再一个个试
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#11

帖子 chinaz » 2019-11-16 0:06

在crontab -e里面加上了DISPLAY=:0.0还是无法运行。。。

MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <DISPLAY=:0.0>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
Date: Sat, 16 Nov 2019 00:02:01 +0800

M-eM^OM^BM-fM^UM-0M-hM-?M^GM-eM-$M^ZM-oM-<M^A
M-gM^TM-(M-fM-3M^UM-oM-<M^Zgnome-web-photo [--mode=photo|thumbnail|print] [...]
Usage: gnome-web-photo [-c CSSFILE] [-d DELAY] [-t TIMEOUT] [--force] [-w WIDTH] [--file] URI|FILE OUTFILE
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#12

帖子 astolia » 2019-11-16 12:01

/home/user/picture/picture.txt内容是什么?你检查过是否包含控制字符了吗?还有你为什么要用more
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#13

帖子 chinaz » 2019-11-16 12:55

astolia 写了: 2019-11-16 12:01 /home/user/picture/picture.txt内容是什么?你检查过是否包含控制字符了吗?还有你为什么要用more
/home/user/picture/picture.txt内容是网页链接,最终效果是用户在smb共享文件夹里面打开这个文件将网址粘贴上保存,一分钟后,自动在当前文件夹生成这个网页的截图,gnome-web-photo是网页截图工具。至于用more。。。则是限于本人学识,只知道这个。。。
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: [求助]请教一个文本替换问题

#14

帖子 astolia » 2019-11-17 1:00

我是让你检查文件中是否包含控制字符,又不是让你说你想干什么。
我严重怀疑那个文件的内容包含有控制字符导致命令行解析出错。比如是在windows/mac os上编辑的,添加了换行,引入了回车符,shell默认不把回车符当成空白字符,就出错了
至于more的问题,我在2楼就给你写了,最好用cat
头像
chinaz
帖子: 238
注册时间: 2007-02-07 9:23

Re: [求助]请教一个文本替换问题

#15

帖子 chinaz » 2019-11-17 22:18

astolia 写了: 2019-11-17 1:00 我是让你检查文件中是否包含控制字符,又不是让你说你想干什么。
我严重怀疑那个文件的内容包含有控制字符导致命令行解析出错。比如是在windows/mac os上编辑的,添加了换行,引入了回车符,shell默认不把回车符当成空白字符,就出错了
至于more的问题,我在2楼就给你写了,最好用cat
谢谢提醒,问题解决。从头梳理了一遍,picture.txt使用unix格式的空文本,又重新构思重写了一遍添加到crontab的脚本文件。现在可以正常执行了。
贴出来分享一下:
#!/bin/bash
cd /home/user/picture/
/usr/bin/gnome-web-photo --mode=photo -t 30 -w 1440 --force --display=:0.0 "$(cat /home/user/picture/picture.txt)" /home/user/picture/"$(date +\%Y\%m\%d\%H\%M\%S)".png
chmod 777 *.png
cat /dev/null > /home/user/picture/picture.txt
find /home/user/picture/ -name "*.png" -size -10k -exec rm -rf {} \;
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
回复