2014-02-05 31 views
0

我运行下面的命令:如何使变量在smbclient命令内扩展?

FILES=`/usr/bin/find /u01/app/dw/admin/dgwspool -type f -daystart -mmin -1621`; 
/usr/bin/smbclient //techshare.something.com/Depts/ -I 129.0.0.1 -D ITIS/deptshare/degreeworks/Test -U domain\\user%password -c "prompt off; mput $FILES" 

我测试过这一点,$ FILES变量充满了文件名的空格分隔的列表。 smblclient命令连接到windows共享,如我所愿,如果我放入一个硬编码的文件名,它会将文件(或文件)复制到共享中。

似乎正在发生的事情是,$ FILES变量未扩展,或者正在某些内部smbclient范围内进行评估。

我该如何得到这个工作?

回答

1

我的心理能力告诉我,你用echo $FILES测试了这个,它将所有的文件打印在一行上,导致你相信$FILES是空格分隔的。不是这种情况。

使用echo $FILES,shell将空格和换行符上的变量拆分为多个参数,然后echo与空格连接。如果您使用echo "$FILES",则会看到它实际上是换行分隔的。

快速修复是打印分隔的文件名空间(需要GNU查找或其他查找与-printf)。根据评论,它也省略搜索路径:

FILES=`/usr/bin/find /u01/app/dw/admin/dgwspool -type f -daystart -mmin -1621 -printf '%P '`; 
+0

你说得对,它们是换行分隔的。但即使有了这个修复,它仍然会像在smbclient声明中没有扩展一样。 –

+0

这是您正在使用的文字代码,还是它是更大脚本的一部分?如果在smbclient行之前添加'set -x'行,它是否显示扩展的文件名? –

+0

这是文字代码。它将被添加到执行其他操作的shell脚本的末尾,但独立于该代码。我只消耗服务器地址和密码,其他的一切都在我使用它。我在命令行上测试,以分号分隔的单行。唉,看起来它正在扩大,但是smbclient没有对这个列表做任何事情。 –