Scpがリモートホストからローカルにファイルを戻すスクリプトがあります。ファイル名にスペースが含まれている場合があります。 scpは、ファイル名にスペースが含まれていないことを好みません。何らかの理由で、スペースを処理する私の試みは正しいscpパスをもたらしませんでした。
コード:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH [email protected]:/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" [email protected]:/Users/Me/Desktop
最初を引用しない場合、$path
には最初の部分のみが含まれます。 2番目を引用符で囲まない場合、scp
はスペースで区切られた各部分を引数として扱います。
(私は変わった $PATH
から$path
理由は$PATH
は重要な予約変数であり、一般的な目的で使用しないでください。)
私はsshで非常によく似たものを試し、コマンドラインを通過させていました。例えば.
ssh <somehost> ls -l "$PATH"
「$ PATH」を定義するだけではうまくいかないことがわかりました。それでもエラーが発生しました。でも走ったら
ssh <somehost> ls -l "\"$PATH"\"
これはうまくいきました。トリックは、追加の「」がシェルからsshコマンドに渡されるようにすることです。