Mam skrypt, który scp jest plikiem ze zdalnego hosta z powrotem na lokalny. Czasami nazwy plików zawierają spacje. scp nie lubi spacji w nazwach plików. Z jakiegoś powodu moje próby obsługi spacji nie doprowadziły do prawidłowej ścieżki scp.
Kod:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop
Prowadzi do
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
Zawarcie PATH w cudzysłowie "$PATH"
daje ten sam błąd.
Zamiana spacji na spacje również nie działa, chociaż o ile mogę powiedzieć, powinna:
ESC_PATH=${PATH/' '/'\ '}
chociaż wydrukowanie ścieżki zmiany znaczenia pokazuje, że edycja działała:
echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
$PATH
do własnych zmiennych, ponieważ twój terminal tego potrzebuje.Odpowiedzi:
Powinieneś podać zarówno deklarację, jak i sposób użycia
Jeśli nie zacytujesz pierwszej,
$path
będzie zawierać tylko pierwszą część. Jeśli nie zacytujesz drugiego,scp
potraktuje każdą część oddzieloną spacją jako argument.(Zmieniłem
$PATH
na,$path
ponieważ$PATH
jest to ważna zmienna zastrzeżona i nie wolno jej używać do celów ogólnych).źródło
Próbowałem czegoś bardzo podobnego z ssh i przepuściłem przez to linię poleceń. na przykład
Przekonałem się, że samo zdefiniowanie „$ PATH” nie załatwiło sprawy - wciąż powodowało błędy. Jednak gdybym pobiegł
To zadziałało. Sztuczka polega na tym, aby dodatkowy zestaw „” został przekazany do polecenia ssh z powłoki.
źródło