Bash
文件名中有空格的腳本出現問題
我有一個腳本,它將 scp 的文件從遠端主機返回到本地。有時文件名包含空格。scp 不喜歡其文件名中的空格。出於某種原因,我處理空格的嘗試沒有導致正確的 scp 路徑。
程式碼:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg scp $PATH Me@10.1.10.33:/Users/Me/Desktop
結果是
Cannot find directory: var/root/Documents/MyFile Cannot find directory: OG-v1.2.3.pkg
將PATH 括在引號中
"$PATH"
會產生相同的錯誤。交換轉義空間的空間也不起作用,儘管據我所知應該:
ESC_PATH=${PATH/' '/'\ '}
儘管列印轉義路徑表明編輯有效:
echo $ESC_PATH > /var/root/Documents/MyFile\ OG-v1.2.3.pkg
您應該同時引用聲明和用法
path="/var/root/Documents/MyFile OG-v1.2.3.pkg" scp "$path" Me@10.1.10.33:/Users/Me/Desktop
如果不引用第一部分,
$path
將只包含第一部分。如果不引用第二個,scp
則將每個空格分隔的部分視為參數。(我已更改
$PATH
為$path
因為$PATH
是一個重要的保留變數,您不得將其用於一般目的。)
我正在嘗試與 ssh 非常相似的東西並通過它傳遞命令行。例如
ssh <somehost> ls -l "$PATH"
我發現簡單地定義“$PATH”並不能解決問題——它仍然會引發錯誤。但是,如果我跑
ssh <somehost> ls -l "\"$PATH"\"
這行得通。訣竅是確保將一組額外的“”從 shell 傳遞給 ssh 命令。