ファイル名にスペースがあるスクリプトの問題


11

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

4
$PATH端末で必要になるため、独自の変数には使用しないでください。
Bernhard 14

回答:


19

宣言と使用法の両方を引用する必要があります

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

最初を引用しない場合$path、最初の部分のみが含まれます。2番目を引用符で囲まない場合、scpスペースで区切られた各部分を引数として扱います。

(は重要な予約変数であり、一般的な目的で使用してはならないため、に変更$PATHしました。)$path$PATH


1
パーフェクト!100万人の@Matteoに感謝します。レンチもそこに投げ込む前置スペースもあったことがわかりました。
Miles Alden

1

私はsshで非常によく似たものを試し、コマンドラインを通過させていました。例えば

ssh <somehost> ls -l "$PATH"

「$ PATH」を定義するだけではうまくいかないことがわかりました。それでもエラーが発生しました。でも走ったら

ssh <somehost> ls -l "\"$PATH"\"

これはうまくいきました。トリックは、追加の ""のセットがシェルからsshコマンドに渡されるようにすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.