Często używam przedrostków używanych plików i folderów znakiem „akcent grave” (tylda non-shift, tyknięcie w tył lub zwykły akcent, co chcesz…), ponieważ łatwo się do niego dostać, i pozwól mi posortuj rzeczy alfabetycznie, pozwalając mi pokazać kilka pozycji na górze. To działa dobrze, z wyjątkiem, gdy idę do dostępu do tych plików za pomocą interfejsu CLI lub SSH / SCP.
Jeśli spróbuję uruchomić polecenie, wywołanie pliku bez zmian ↝ powoduje, że przechodzę do sesji interaktywnej .. na przykład ↯
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>
Ale jeśli spróbuję logicznego rozwiązania ↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Wiem, że „nową” zasadą jest użycie składni takiej jak export NOW=$(date)
vs export NOW=
„data” (w rzeczywistości miałem trochę czasu, nawet pisząc tę ostatnią w składni SE MD ...), ale nie jest to związane z ENV
żadnym skryptem. ..
Uwaga: To jest środowisko Mac OS X, ale powiedział, że GUI nigdy nie miałem problemu radzenia sobie z tym charakterze na zasadzie z dnia na dzień, a zwykle, jeśli nie będzie to problem składni w terminalu, Apple robi całkiem dobrą robotę, wyłączając zachowanie w GUI ... Nie jestem pewien, czy to błąd, czy też technika radzenia sobie z takimi ścieżkami jest po prostu niejasna ... ale jak dotąd nie byłem w stanie znaleźć sposób „uciec” ?
Odpowiedzi:
Możesz użyć 3 odwrotnych ukośników, o których wspomniał Jed Daniels, lub możesz zawinąć je w pojedyncze cudzysłowy
(')
i użyć pojedynczego odwrotnego ukośnika.Przykłady obu są poniżej.
źródło
Powinny to zrobić trzy ukośniki odwrotne:
Pierwszy odwrotny ukośnik ucieka przed lewostronnym, więc zostaje wysłany na drugą stronę, ale druga strona zgłasza błąd, ponieważ oczekuje, że lewy wsteczny będzie w parach. Drugi ukośnik odwraca się od pierwszego ukośnika, następnie potrzebujesz dwóch dodatkowych ukośników, aby móc wysłać ukośnik odwrotny na drugą stronę.
EDYCJA: Jak wspomina Rik, możesz to zrobić z jednym cytatem. Nie pomyślałem o tym, ponieważ nie możesz nam tego zrobić za pomocą zmiennych (nie będą one rozszerzane w systemie lokalnym, gdy będą w pojedynczych cudzysłowach).
źródło
Zwykle wiersze poleceń są interpretowane przez powłokę jeden raz. Jednak ze względów historycznych scp przekazuje również nazwę pliku do powłoki zdalnej, więc nazwa pliku jest interpretowana przez powłoki dwukrotnie . To również sprawia, że rzeczy
scp remote:'/path/prefix*' /path/local/
działają, zdalna powłoka się rozwija/path/prefix*
.Najłatwiejszym sposobem uniknięcia drugiego rozszerzenia jest użycie sftp, który nie używa zdalnej powłoki. Nadal wykonuje ekspansję globalną, ale ponieważ można jej wydawać polecenia na standardowe wejście, można całkowicie uniknąć lokalnej ekspansji powłoki.
Poza tym możesz użyć dowolnego z normalnych mechanizmów cytowania powłoki, w tym tych podanych przez @Jeda Danielsa i @Rik Schneider, ale chciałem wyjaśnić, co się właściwie dzieje i wspomnieć o sftp.
(Możesz używać wszelkiego rodzaju funkcji powłoki w nazwie pliku scp, na przykład
scp server:\$HOME/file dest
użyje pomysłu zdalnej powłoki$HOME
, podczas gdy gdybyś ją wyjął\
, użyłby twojej powłoki lokalnej ).źródło