我正在尝试查看tar文件是否有更改,如果更改了,则将这些文件解压缩,将cd放入目录中,然后构建,然后运行。
我手头上的资料如下:
while [ 1 ]
do
checksum=`md5sum kinect.tar`
sleep 10
newsum=`md5sum kinect.tar`
if [ $newsum -ne $checksum ]
then
killall lebron
tar -zxf kinect.tar
cd kinect
make
./lebron &
fi
done偶尔,我在使用if时会遇到[ has too many arguments错误,但我不确定原因。我所拥有的一切都可以吗?你能建议一个替代的解决方案吗?
发布于 2012-02-11 12:16:34
您的问题之一是md5sum同时返回散列和文件名。您只想捕获散列。您可以使用带有重定向和进程替换的read内置来轻松完成此操作。
而且,既然你已经使用bash作为你的解释器,那么你真的没有必要在[ ]上使用[[ ]],而且前者的能力要强得多。
#!/bin/bash
while true; do
read checksum _ < <(md5sum kinect.tar)
sleep 10
read newsum _ < <(md5sum kinect.tar)
if [[ $newsum != $checksum ]]; then
killall lebron
tar -zxf kinect.tar
cd kinect
make
./lebron &
fi
done发布于 2012-02-11 03:37:54
首先,你没有引用你的变量。其次,-ne用于比较数字,而不是字符串。请改用!=:
if [ "$newsum" != "$checksum" ]正如Ed Heal在他的评论中指出的那样,只有当文件被原子修改时,算法才可能有意义。保证这一点的最好方法是在一个地方生成它,然后将其转移到kinect.tar。此外,如果在构建以前的版本时修改了文件,您的代码将无法捕获更改,这可以通过Ed Heal建议的以下更改进行修复:
checksum=`md5sum kinect.tar`
while [ 1 ]
do
sleep 10
old_checksum=$checksum
checksum=`md5sum kinect.tar`
if [ "$old_checksum" != "$checksum" ]实际上,如果您有一种更好的方法让编写.tar文件的进程与您的脚本通信,那将是最好的。例如,新的.tar文件总是完全写入,然后移动到kinect-new.tar,脚本检查并移动到kinect.tar。这样既避免了读取不完整文件的可能性,也避免了比较md5sums时的混乱。(您可以更有想象力,使用像inotify-tools这样的工具来避免显式轮询,但这可能不值得您费力。)
不幸的是,这并不能解决构建可能失败的问题(除非您正在使用的.tar文件是已知良好的发行版,在这种情况下,您似乎不太可能想要每10秒检查一个新文件)。您可能想创建一个目录,在那里解压,只有在make成功的情况下才替换旧版本。大致是这样的:
tar -zxf kinect.tar
cd kinect
if make
then
cd ..
rm -rf kinect.good
mv kinect kinect.good
cd kinect.good
killall lebron
./lebron &
fi
cd .. # make sure we always stay in the original directory发布于 2012-02-11 12:25:29
这是对上面@tekknolagi评论的回复-使用它来使回复更具可读性。
检查更新的脚本
checksum=`md5sum kinect.tar`
while [ 1 ]
do
sleep 10
newsum=`md5sum kinect.tar`
if [ "$newsum" != "$checksum" ]
then
# Inform you that the file has changed (email perhaps).
fi 我假设您是通过网络(FTP?)接收tar文件的。如果是这样,请执行以下操作
1) FTP到不同的文件名2) FTP一个小的大小(1字节)以指示FTP已完成3)修改上述脚本以检查步骤2接收到的文件。如果找到,请将其删除(或者最好将其重命名以便于恢复),删除旧的kinect.tar文件。将步骤1中的文件移至适当位置
或
1) FTP到不同的文件名2)获取FTP以删除kinect.tar 3)获取FTP以将文件从1)移至适当位置。
https://stackoverflow.com/questions/9233686
复制相似问题