错误的命令重定向到shell变量?

时间:2014-12-26 20:07:16

标签: shell

我想从XML stdin获取目录名,然后将内容复制到targetdirectory:

 count=$(echo $xmlstring | xmlstarlet sel -t -v "count(//directory)" -) && for ((i=1; i<=count; i++)); do {currentpath=$(echo $xmlstring| xmlstarlet sel -t -v "//directory[$i]/text()" -) && cp currentpath /opt/targetdir} ; done    

收到错误:

  

意外令牌附近的语法错误`echo&#39;

当我使用echo代替cp时:

count=$(echo $xmlstring | xmlstarlet sel -t -v "count(//directory)" -) && for ((i=1; i<=count; i++)); do {currentpath=$(echo $xmlstring| xmlstarlet sel -t -v "//directory[$i]/text()" -) && echo currentpath} ; done    

基本上我试图将xml Stdin中的目录名称作为我的CP命令的源目录....所以最后,xml中指定的目录中的所有文件都被复制到targetdir

我收到错误:

-bash: {currentpath=/opt/in1: No such file or directory
{currentpath=: command not found        

从xml stdin获取目录并写入txt文件工作,
但是当我想从currentdirectory复制到某个targetdir时,它不起作用。

1 个答案:

答案 0 :(得分:2)

出现了很多错误,请参阅此更正版本:

count=$(echo "$xmlstring" | xmlstarlet sel -t -v "count(//directory)" -)
for ((i=1; i<=count; i++)); do
    currentpath="$(
        echo "$xmlstring" |
            xmlstarlet sel -t -v "//directory[$i]/text()" - |
            tr -d '$\n'
    )"
    cp "$currentpath" "/opt/targetdir/"
done