2014-09-24 62 views
2

我遇到過7z(或bash,我還不知道)的奇怪行爲。 隨着下面的腳本:來自bash腳本的7z不會排除目錄

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user 

我也試着:

#!/bin/bash 
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst; 
lst1=" [email protected]/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' " 
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user); 
$command 

也,最後兩行可以很容易地用單線取代

command="/usr/bin/7z a $lst1 -v2048M arch0.7z /home/dh ;" 

我接收'arch0.7z'文件,但文件夾.config和.cache仍然包含在內,而:

#!/bin/bash 
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst; 
/usr/bin/7z a [email protected]/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;" 

用正確排除的文件夾生成文件。

所以,我想,就是從變量擴大了線的區別是:

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user 

和一個我一直類型爲是:

/usr/bin/7z a [email protected]/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user 

沒有任何理由這樣7z工作流程的重大變化?

+2

http://mywiki.wooledge.org/BashFAQ/050不要試圖在變量中加引用的字符串。它不起作用。將這些參數放在數組中,它可能會工作。另請參閱兩個腳本的'set -x'輸出,您應該看到不同之處。 – 2014-09-24 03:26:03

回答

1

這是我沒有預料到的。

lst1=' [email protected]/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' ' 
7z a $lst1 -v2048M arch0.7z /home/me 

做的竅門,而我在想,單引號 -xr!' .config/'將結束變量賦值,它實際上作爲參數的一部分工作。 另外,如果我的變量是一個數組,則完美工作。

順便說一句,用「!」轉義將不起作用,7z說:「錯誤:錯誤的命令行」。