簡體   English   中英

無法從bash腳本中獲取帶有空格的SCP路徑嗎?

[英]Cannot SCP a path with spaces from bash script?

我有一個bash腳本,該腳本生成一個SCP命令來執行。 代碼的相關部分如下所示:

echo $COPY_CMD
$COPY_CMD

我的輸出看起來像這樣:

rascher@localhost:~/Desktop/video_final$ ./xfervids.sh 
scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/
rascher@192.168.1.101'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" )中的空格,而不是一個( "My\\\\ Book" )放置兩個\\字符,但是我無法使它始終如一地運行。 救命?

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

在上下文中,您可能需要:

eval $COPY_CMD

這次您不需要在變量周圍加上引號。

您應該閱讀有關如何以及為什么避免將命令放在變量中的討論 ,以及有關eval的安全隱患的討論

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM