2014-02-05 26 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沒有對這個列表做任何事情。 –