Kişi bir yoldaki “aksan mezarından / ters çentikten” nasıl kaçar?


13

Ben kullanılan dosya ve klasörleri "vurgulu mezar" karakteri (kaymaz tilde, geri-kene veya düz eski aksan, whathaveyou ..) ile önek eğilimindedir, çünkü bana ulaşmak kolay alfabetik olarak sırala, üstte birkaç öğe göstermeme izin verir. O ben CLI veya SSH / SCP yoluyla bu dosyalara erişmek için gittiğinizde dışında güzel çalışıyor.

Bir komutu çalıştırmayı denersem, dosyayı kaçışsız olarak çağırırsam beni interaktif bir oturumda açar .. örneğin ↯

# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>

Yine de mantıklı çözümü denersem ↯

# 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

Ben "yeni" kural export NOW=$(date)vs export NOW= `date` gibi bir sözdizimi kullanmak olduğunu biliyorum (aslında, hatta SE MD sözdiziminde ikincisini yazarken bir ayı vardı ...) ama bu ENVveya herhangi bir komut dosyası ile ilgisi yoktur . ..

Not: Bu ise bir Mac OS X ortamında ancak, GUI bir gün-gün bazında bu karakteri ile uğraşan bir sorun vardı ve asla söz konusu genellikle, Terminal, Apple bir sözdizimi sorun var gidiyorsa GUI'deki davranışı devre dışı bırakma konusunda oldukça iyi bir iş çıkarıyor ... Bunun bir hata olup olmadığından emin değilim veya bu tür yollarla başa çıkmak için teknik sadece belirsiz ... ama şimdiye kadar, bulamadım "kaçmak" için bir yol ?


neden sadece 1 numara gibi kaçması gerekmeyen bir karakter kullanmıyorsunuz?
JamesRyan

backtick - görsel olarak - daha az yıkıcı (benim için) ve bir tür sınırlayıcı olarak yeniden tasarlandığında daha az doğal anlamsal bagajı var.
mralexgray

Yanıtlar:


11

Jed Daniels tarafından belirtildiği gibi 3 ters eğik çizgi kullanabilir veya tek tırnak içine alabilir (')ve tek bir ters eğik çizgi kullanabilirsiniz.

Her ikisinin örneği aşağıdadır.

$ touch dir/'`rik' 
$ ls -l dir
total 1865376
-rw-r--r--  1 rik  staff          0 Jul  1 09:51 `rik 
$ scp localhost:dir/\\\`rik ./ `rik         
100%    0     0.0KB/s   00:00     
$ scp localhost:dir/'\`rik' ./ `rik     
100%    0     0.0KB/s   00:00     
$

müthiş. Sanırım bu cevabı seçeceğim çünkü bunu yapmanın iki yolu olması güzel. her iki şekilde de bu tekniği yerel olarak, sadece bir eğik çizgi kullanarak veya eğik çizgi-ters, NO SLASHES ve sadece sorunlu dosya veya dizin etrafında tek teklif tekniği .. teşekkürler!
mralexgray

5

Üç ters eğik çizgi bunu yapmalıdır:

jed@jed-osx:~$ ls -la \`foo
ls: `foo: No such file or directory
jed@jed-osx:~$ scp desk:\\\`foo .
`foo                                            100%    0     0.0KB/s   00:00    
jed@jed-osx:~$ ls -la \`foo
-rw-r--r--  1 jed  staff  0 Jul  1 09:45 `foo
jed@jed-osx:~$ rm \`foo

İlk ters eğik çizgi backtick'ten kaçar, böylece diğer tarafa gönderilir, ancak diğer taraf hatayı atar, çünkü backticklerin çift halinde olmasını bekler. İkinci ters eğik çizgi ilk ters eğik çizgiden kaçar, o zaman ekstra iki ters eğik çizgiye ihtiyacınız vardır, böylece diğer tarafa kaçan bir ters eğik çizgi gönderebilirsiniz.

DÜZENLEME: Rik'ın belirttiği gibi, bunu tek bir alıntı ile de yapabilirsiniz. Bunu düşünmemiştim çünkü değişkenlerle bize yapamazsınız (tek tırnaklarda yerel sistemde genişleyemezler).


3

Normalde, komut satırları kabuk tarafından bir kez yorumlanır. Ancak, tarihsel nedenlerle, scp dosya adını uzak kabuğa da iletir, böylece dosya adı kabuklar tarafından iki kez yorumlanır . scp remote:'/path/prefix*' /path/local/İşi böyle yapan şey de bu, uzak kabuk genişliyor /path/prefix*.

İkinci genişlemeyi önlemenin en kolay yolu, uzak kabuk kullanmayan sftp kullanmaktır. Hala glob genişlemesi yapıyor, ancak stdin'de komutlar verebildiğiniz için, yerel kabuk genişlemenizi tamamen önleyebilirsiniz.

Bunun dışında, @Jed Daniels ve @Rik Schneider tarafından verilenler de dahil olmak üzere normal kabuk alıntılama mekanizmalarından herhangi birini kullanabilirsiniz, ancak gerçekte ne olduğunu açıklamak ve sftp'den bahsetmek istedim.

(Scp dosya adınızdaki her türlü kabuk özelliğini scp server:\$HOME/file destkullanabilirsiniz, örneğin uzak kabuğun fikrini kullanacak $HOME, oysa eğer yerel kabuğunuzu \kullanacaksınız .).

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.