
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
答え1
宣言と使用法を引用する必要があります。
path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" [email protected]:/Users/Me/Desktop
最初の部分を引用しない場合は、$path
最初の部分のみが含まれます。 2番目の部分を引用しないと、scp
スペースで区切られた各部分はパラメータとして扱われます。
(重要な予約変数であり、一般用途では使用できないため$PATH
に変更しました。)$path
$PATH
答え2
私はsshを使って非常に似たアプローチを試み、それを介してコマンドラインを渡します。例えば
ssh <somehost> ls -l "$PATH"
単に「$PATH」を定義するだけでは効果がないことがわかりました。それでもエラーが発生しました。しかし、私が走ったら
ssh <somehost> ls -l "\"$PATH"\"
これはうまくいきます。秘密は、""の追加セットがシェルからsshコマンドに渡されることを確認することです。