【发布时间】:2012-03-22 15:09:49
【问题描述】:
我有以下 bash 脚本:
#DIR is something like: /home/foo/foobar/test/ without any whitespace but can also include whitespace
DIR="$( cd "$( dirname "$0" )" && pwd )"
#backup_name is read from a file
backup_name=FOOBAR
date=`date +%Y%m%d_%H%M_%S`
#subdirs is also read from the same file
subdirs=etc/ sbin/ bin/
filename="$DIR/Backup_$backup_name"_"$date.tar.gz"
cd /
echo "filename: $filename"
echo "subdirs $subdirs"
cmd='tar czvf "'$filename'" '$subdirs
echo "cmd tar: $cmd"
$cmd
但我得到以下输出:
filename: /home/foo/foobar/test/Backup_FOOBAR_20120322_1529_35.tar.gz
subdirs: etc/ sbin/ bin/
cmd tar: tar cfvz "/home/foo/foobar/test/Backup_FOOBAR_20120322_1529_35.tar.gz" etc/ sbin/ bin/
etc/
# ... list of files in etc
# but no files from sbin or bin directory
tar: "/home/foo/foobar/test/Backup_FOOBAR_20120322_1529_35.tar.gz": can open not execute: File or directory not found
tar: not recoverable error: abortion.
但是,当我复制 tar 命令的 echo 输出时,制作一个 cd 到 / 并将其粘贴到它正在工作的 bash shell 中:
tar cfvz "/home/foo/foobar/test/Backup_FOOBAR_20120322_1529_35.tar.gz" etc/ sbin/ bin/
etc/
- 每个变量都已定义,并且没有尾随换行符
- 我还尝试了带反引号的 $cmd
- 从文件中读取backup_name和subdirs这两个变量(代码中我没有包含读取过程)
编辑:我只是将我的脚本复制到一个没有空格的目录并更改了行:
cmd='tar czvf "'$filename'" '$subdirs
#to
cmd="tar czvf $filename $subdirs"
它现在正在工作,但是当我在一个也包含空格的目录中执行相同操作时,我仍然得到相同的错误。
edit2: 从文件中读取(在其他任何事情发生之前读取文件)
config="config.txt"
local line
while read line
do
#points to next free element and declares it
config_lines[${#config_lines[@]}]=$line
done <$config
backup_name=${config_line[0]}
subdirs=${config_line[1]}
我的 bash 脚本有什么问题?
【问题讨论】:
-
f 应该是最后一个选项,因为它需要您的 tar 文件参数。试试
tar czvf -
还是一样,但谢谢提供信息。
-
请编辑您的帖子以包含您的
$config文件中的问题行。祝你好运。