LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 742|回复: 5

请教:奇怪的脚本问题?

[复制链接]
发表于 2004-12-14 18:14:02 | 显示全部楼层 |阅读模式
我写了一个如下的脚本来备份我自己的工作目录

  1. #!/bin/bash

  2. WORK_DIR="/mnt/file/work/{doc03,__Download,gcc,java,js,
  3. lnx_sys_config,sh,src,sum,TeX,__webs}"
  4. DEVICE_FILE="/mnt/back/backup_work_`date +%F`_"
  5. DATE_TAG="work_full-back-date.tag"
  6. BACK_LIST="/tmp/work_backlist"

  7. if [ "$1" == "-full" ]; then
  8. DEVICE_FILE=$DEVICE_FILE"full.tar.gz"
  9. tar -c -f $DEVICE_FILE $WORK_DIR -z
  10. chmod 600 $DATE_TAG
  11. echo "`date +%F` full" > $DATE_TAG
  12. chmod 400 $DATE_TAG
  13. else
  14. DEVICE_FILE=$DEVICE_FILE"inc.tar.gz"
  15. echo $DEVICE_FILE
  16. echo $WORK_DIR
  17. find $WORK_DIR -newer $DATE_TAG > $BACK_LIST
  18. tar -c -T $BACK_LIST -f $DEVICE_FILE -z
  19. rm $BACK_LIST
  20. fi
复制代码

但最后却报告:
tar: /mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}:
Cannot stat: No such file or directory
以及:
find: /mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}:
No such file or directory
我在命令行上手工运行这两个命令执行上面的任务,没有问题!这让我感到很奇怪,难道在脚本中{FILE1,FILE2,...}就不起作用?
发表于 2004-12-14 21:08:23 | 显示全部楼层
你先
  1. #bash -x scripname
复制代码
执行一下,看它替换成了什么?
 楼主| 发表于 2004-12-15 10:23:19 | 显示全部楼层
(1) $tar cfz archive.tar.gz DIR/{file1,file2,...}
$find DIR/{file1,file2,...}

(2) $tar cfz archive.tar.gz 'DIR/{file1,file2,...}'
$find 'DIR/{file1,file2,...}'

(1) is OK, (2) can't find the files.

于是我在脚本中定义变量时去掉引号,还是不行:
# sh -x back_work.sh

+ WORK_DIR=/mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}
++ date +%F
+ DEVICE_FILE=/mnt/back/backup_work_2004-12-15_
+ DATE_TAG=work_full-back-date.tag
+ BACK_LIST=/tmp/work_backlist
+ '[' '' == -full ']'
+ DEVICE_FILE=/mnt/back/backup_work_2004-12-15_inc.tar.gz
+ echo /mnt/back/backup_work_2004-12-15_inc.tar.gz
/mnt/back/backup_work_2004-12-15_inc.tar.gz
+ echo '/mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}'
/mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}
+ find '/mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}' -newer work_full-back-date.tag
find: /mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}: No such file or directory
+ tar -c -T /tmp/work_backlist -f /mnt/back/backup_work_2004-12-15_inc.tar.gz -z
+ rm /tmp/work_backlist

这就是说,在展开变量时,自动又加上了引号。不知道有什么办法可以去除。
发表于 2004-12-15 10:26:50 | 显示全部楼层

用单引号可以吗

没有试过
 楼主| 发表于 2004-12-16 00:28:04 | 显示全部楼层
用单、双引号都不行
 楼主| 发表于 2004-12-16 23:21:32 | 显示全部楼层

`echo /mnt/file/work/{doc03,__Download,gcc,java,js,lnx_sys_config,sh,src,sum,TeX,__webs}`

OK.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表