问题描述
我有一个通过给定的路径下的所有文件夹循环并执行一些操作的bash脚本。
I have a bash script that loops through all folders inside a given path and performs some actions.
我现在需要这个剧本本身找到指定的路径,通过监控,我会从我的服务器更新文件。
I now need this script to find the given path by itself, by monitoring a file that I will update from my server.
那么,该脚本有:
- 检查文件是否存在todo.txt
- 读取文件的第一行
- 在第一行定义的文件夹内执行操作
- 删除todo.txt
- 添加done.txt它在todo.txt发现了同样的行
由于某些原因,当我直接运行该脚本,这个工程完美
For some reason, when I run the script directly, this works perfect
cd /proper/path/to/todo
FILE=todo.txt
if [ -f $FILE ];
then
FOLDER=$(head -1 $FILE)
echo "path to process:"$FOLDER
fi;
的输出是不错的,该文件被读取时,输出为路径的过程:/正确的/路径/读/从/文件
The output is good, the file is read, the output is "path to process: /correct/path/read/from/file"
然而,当我成立了一个cron作业运行此脚本时,$文件夹变量是空的,所以输出的只是路径的过程:
However, when I set up a cron job to run this script, the $FOLDER variable is empty so the output is just "path to process:"
* * * * * /bin/sh /www/www.mysite.com/myscript.sh >> /www/www.mysite.com/log.txt
需要注意的是:
1.脚本运行
2.如果[-f $ FILE]的作品,所以文件中找到
Note that:1. the script IS ran2. the if [ -f $FILE ] works, so the file is found
这只是头命令失败。
任何想法?谢谢!
推荐答案
这听起来像的/ usr / bin中
不是cron中的PATH。试试这个:添加这个进入的cron
It sounds like /usr/bin
is not in cron's PATH. Try this: add this entry into cron
* * * * * env > $HOME/cron.env
等一下,看看这个文件怎么说。
Wait a minute and see what that file says.
- 而不是,因为我在$(LS)
不要在*
文件。由于为
在迭代的字,与空白任何文件将无法得到妥善处理。
Don't parse ls
-- instead of for i in $(ls)
do for file in *
. Since for
iterates over words, any filename with whitespace will not be handled properly
这篇关于bash脚本:基于文件内容执行操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!