Dosya adındaki boşluklarla komut dosyasında sorun var


11

Scp uzak ana bilgisayardan yerel bir dosya bir komut dosyası var. Bazen dosya adları boşluk içerebilir. scp dosya adlarındaki boşlukları sevmez. Nedense boşlukları kullanma girişimlerim doğru scp yolu ile sonuçlanmadı.

Kod:

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

Sonuçları

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

PATH değerini tırnak işaretleri içine almak "$PATH"aynı hatayı verir.

Kaçan alanlar için boşlukları değiştirmek de işe yaramıyor, ancak söyleyebildiğim kadarıyla:

ESC_PATH=${PATH/' '/'\ '}

kaçan yolu yazdırmak düzenlemenin işe yaradığını gösteriyor olsa da:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
Lütfen $PATHkendi değişkenleriniz için kullanmayın , çünkü terminalinizin buna ihtiyacı vardır.
Bernhard

Yanıtlar:


19

Hem beyanı hem de kullanımı teklif etmelisiniz

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

İlk alıntı yapmazsanız, $pathsadece ilk kısmı içerir. İkincisini belirtmezseniz, scpboşlukla ayrılmış her parçayı bir argüman olarak ele alır.

(Ben değiştim $PATHiçin $pathçünkü $PATHönemli ayrılmış değişkendir ve genel amaçlar için kullanmak yasaktır.)


1
Mükemmel! Teşekkürler bir milyon @Matteo. Ayrıca içine bir anahtar atan bir önek boşluğu olduğu ortaya çıkıyor.
Miles Alden

1

Ssh ile çok benzer bir şey deniyor ve içinden bir komut satırı geçiriyordum. Örneğin

ssh <somehost> ls -l "$PATH"

Ben sadece "$ PATH" tanımlamanın hile yapmadığını buldum - hala hatalar attı. Ancak koştuysam

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

Bu işe yaradı. İşin püf noktası, ek bir "" kümesinin kabuktan ssh komutuna aktarılmasını sağlamaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.