2009-12-29 36 views
1

我有一個bash腳本,它產生一個SCP命令來執行。代碼的相關部分是這樣的:SCP不能使用bash腳本中的空格嗎?

echo $COPY_CMD 
$COPY_CMD 

我的輸出是這樣的:

 
[email protected]:~/Desktop/video_final$ ./xfervids.sh 
scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" [email protected]:./video_working/ 
[email protected]'s password: 
"/media/My: No such file or directory 
Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": No such file or directory 

然而,當我把我的輸出線2:scp "/media/...,將它複製,並粘貼到終端,它的作品。

我在做什麼錯?我試圖逃避「我的書」("My\ Book")中的空間,放置兩個\字符而不是一個("My\\ Book"),但我無法使其表現一致。幫幫我?

回答

5

當路徑名稱中有空格時,您必須非常小心。

在上下文,你可能需要:

eval $COPY_CMD 

你不需要這一次變量的報價。

+1

完全不知道'eval' bash命令。謝謝! – poundifdef 2009-12-29 03:42:34

4

您應該閱讀this discussion關於如何以及爲什麼避免將命令放入變量和eval的安全影響的this discussion

您可能希望以這種方式使用變量的一個原因是記錄或顯示腳本執行的操作。正如您發現的那樣,能夠正確引用或逸出空間等問題就會發生。一種方法可以使用set -xset +x來在腳本中的各個位置打開和關閉這種類型的輸出。

+0

對我小小的家庭DVD刻錄腳本來說可能是過火了,但是很好的信息。 – poundifdef 2009-12-29 09:16:09