我試圖使用scp
在bash
中使用源文件名中的冒號(:
)字符複製文件。我命令我使用的模糊版本是:如何在文件名中使用冒號scp文件?
scp file\:\ name.mp4 [email protected]:"/path/to/dest"
我得到這個錯誤:
ssh: Could not resolve hostname Portal 2: Name or service not known
我知道我可以只重命名該文件並刪除:
,但我想知道是否有可能逃離結腸。
我試圖使用scp
在bash
中使用源文件名中的冒號(:
)字符複製文件。我命令我使用的模糊版本是:如何在文件名中使用冒號scp文件?
scp file\:\ name.mp4 [email protected]:"/path/to/dest"
我得到這個錯誤:
ssh: Could not resolve hostname Portal 2: Name or service not known
我知道我可以只重命名該文件並刪除:
,但我想知道是否有可能逃離結腸。
不太一個bash
逃避問題,這是scp
治療x:
爲[用戶@]主機前綴,請嘗試:
scp ./file:\ name.mp4 [email protected]:"/path/to/dest"
使用相對(如./
)或完全合格的路徑(/path/to/source
)防止這種行爲 - 在:
之前存在/
導致OpenSSH停止檢查可能的host:
或[email protected]:
前綴)。 OpenSSH的scp
只有啓動的特殊情況下的文件名,允許這些工作沒有問題的冒號,它不支持在正常意義上轉義:
,並且沒有其他有效主機名的概念,因此幾乎所有具有:
的文件名都可以導致這一點。
(由於OpenSSH的年代[]
封閉的IPv6地址簡單的解析,就可以成功scp
文件包含:
與[
開始,或者包含@[
的:
之前,不包含]:
,但這不是普遍有用;-)
(下面的文字寫當original question是如何逃脫在bash冒號?它適用於這種情況,但不scp
如無殼逸出量將幫助那裏。)
要回答這個問題有關如何逃脫:
,你並不需要,但「\:
」的作品。一個:
用於地方:
:
,沒必要逃避,雖然可以,就像\e\c\h\o foo
它的命令沒有影響(「沒有效果」並不完全正確,如果你逃跑一個或多個字符它會阻止一個別名相匹配)PATH
(和其他人,CDPATH
,MAILPATH
)轉義值沒有任何有用的效果(我一直無法從含有:
的目錄在我的PATH運行一個程序,這有點出乎意料)${name:-x}
多,name
必須[a-zA-Z_][a-zA-Z0-9_]
,所以沒有必要逃避變量名稱,因爲沒有歧義,沒有必要在? :
三元只在變量和數字,無需操作參數擴展的其他變化逃脫隨後:
逃跑==
和=~
帶班像[[:digit:]]
模式,你可以用\:
逃走,但我在一個頭緒,可能永遠是有用的...\:
沒有有用的效果(需要注意的是空命令只是:
,你可以有一個命令或功能命名,如「:foo
」,它可以在沒有逃脫被調用,在這方面它是不同的,以#
,其中一個名爲#foo
命令將需要)
同樣的問題影響'rsync'。幸運的是,同樣的解決方案 - 以'。/'作爲文件名前綴 - 也可以幫助您。 –