最近在折腾一个脚本,但是总遇到 一个报错!
脚本在 https://github.com/jalena/vps-backup/blob/master/backup.sh (错误地方在#97 )
每次执行的时候以下代码就包 tar 没有 e 参数!!
function configuration(){
nginxcnf='find / -name nginx.conf |grep -v root'
tar cPf nginx$(date +%Y%m%d).tar.gz $NGINXPATH
echo -e "package nginx$(date +%Y%m%d).tar.gz success!"
tar rPf nginx_$(date +%Y%m%d).tar.gz $nginx_cnf
echo -e "Additional file successfully"
}
求大神解答写
configuration(){
tar cPf nginx_$current_date.tar.gz $NGINX_PATH
echo -e "package nginx_$current_date.tar.gz success!"
find / -name nginx.conf |grep -v root | xargs tar rPf nginx_$current_date.tar.gz
echo -e "Additional file successfully"
}
原来是因为直接使用 find 获取路径,没有将获取的路径转义..包含了空格 /...命令就变成
tar rPf nginx_$(date +%Y%m%d).tar.gz `find / -name nginx.conf |grep -v root'
当然这个语法就是错误的~~~
1
ooxxcc 2015-12-09 10:36:15 +08:00
错误提示都不贴出来……
|
2
ooxxcc 2015-12-09 10:37:27 +08:00
两个 tar 命令前面加 echo ,看看实际执行的指令是什么
|
3
pright 2015-12-09 10:47:11 +08:00
nginxcnf=`find / -name nginx.conf |grep -v root`
是`不是' |
4
congeec 2015-12-09 10:48:04 +08:00
看了下,你 shell 用的很不规范。即使这个地方修复了其他地方肯定也有 bug 。用 shellcheck 过一边吧
|
5
SpicyCat 2015-12-09 11:56:30 +08:00
set -ex 或者 set -x 看看详细执行信息。
打包是 tar zcPf 吧?你代码在另外一个地方用的是 tar zcPf ,为什么这里用 tar cPf |
6
Arthur2e5 2015-12-20 13:48:49 +08:00
|
7
congeec 2015-12-20 14:54:50 +08:00
@Arthur2e5 funciton 啥的就是看起来碍不碍眼。关键是楼主变量没有加引号噗哈哈。
``` shell var= rm -rf /usr/local/$var ``` 然后 /usr/local 目录就没了😆😆 |
8
JerningChan 2015-12-21 11:07:14 +08:00
你的$nginx_cnf?是哪个变量呀?
你帖出来的,就看见个 nginxcnf='find / -name nginx.conf |grep -v root' 你确定你未写错变量? |
9
Arthur2e5 2015-12-21 17:00:16 +08:00
@congeec function 并不是碍不碍眼的问题。写顺了写进简陋一点但还算 POSIX 的 shell 例如 dash 和 busybox ash 试试喏。这种最容易避免的 bashism 干脆从最早就不要有。
* 当然,可以养成 `alias function=` 的习惯…… 然后管你加不加引号你那个 var 是空的的时候都得死啊。 |
11
jalena OP @pright 找到问题了,,,,,就是 nginxcnf=`find / -name nginx.conf |grep -v root` ~~~~~~
|
13
jalena OP @JerningChan 变量没错,,只是这个输出的东西和打包用的路径不符,所以报错..用通道就好了..
find / -name nginx.conf |grep -v root | xargs tar rPf nginx_$current_date.tar.gz |