Cd `nin (backtick) amacı nedir?


57

Aşağıdakiler Fedora ve CentOS'ta aynı şekilde davranır.

cd mydirectory

Eserleri.

cd notadirectory

çalışır (Bash'den bir hata alır).

Ancak,

cd `

bana bir tür bilgi verir:

>

Girmeyi düşündüğüm hiçbir şey herhangi bir yanıt vermez, yalnızca tekrar sormak için bir sonraki satıra gider. Geri dönmek için sadece CTRL+ tuşunu kullanın .Croot@localhost

Bunun amacı nedir ve bununla neler yapılabilir?

Teşekkürler!



6
Bu nedenle sorunuz, >diğer durumlarda da ortaya çıkabileceği için, backtick ile ilgili olandan daha fazlası hakkındadır
Tobias Kienzler

Yanıtlar:


124

Yazdıklarınız bir geri tepmedir - komut olarak yazdıklarınızı değerlendirmek için bash komutunun verilmesidir. Bir >sonraki satırda hala komuta girdiğinizi göstermek için görüntülenir.

Eğer backtick'i kapatırsanız tüm komutun çalışacağını göreceksiniz. Örneğin

~$ cd `
> echo /var`
/var$

17
Hatta onları yuvalayabilirsiniz. Biraz gerçekçi bir örnek için: cd `dirname \`which ls\``= "ls" binary değerinin bulunduğu dizine cd. (yani cd /bino zamandan beri /bin/ls) [değiştir:
phew, markdown 'ın kaçması

54
@ MSalters Belki de modern bash'ın tercih $()etmesinin nedeni üzerine tökezlediniz ``. Örneği (artı doğru alıntı) cd "$(dirname "$(which ls)")"çok daha az delice olan olur.
Muzer

31
@Muzer Sadece onu tercih eden bir bash değil, aynı zamanda$() backquotes üzerinden kullanılması POSIX belirtiminde de tavsiye edilir .
Denizyıldızı

59

JohnC'nin cevabı zaten backtick'i açıklıyor. Ama aynı zamanda merak ettiğiniz şey de >istemidir. Bu bir devam istemidir ve yalnızca bir geri tepme ile tetiklenmez, ancak her zaman kabuğunuz bir komuta girmediğinizi açıkça bildiğinde. En kolay örnek, \bir giriş satırının sonuna (uzun bir girişin bölünmesine yardımcı olan) açık bir satır devamı koymaktır:

$ echo \
> hallo

Tıpkı PS1komut isteminin görünümünü kontrol ettiği gibi , devam komutunu da PS2değiştirmek üzere ayarlayabilirsiniz ;

$ export PS2="(cont.) "
$ echo \
(cont.) hallo

Devamın gerçekleşmesi için birçok neden var. Tek bir backtick eksik, ancak aynı zamanda gibi bir şey girebilirsiniz

ls -l `which cp`

tek bir satırda (yan not: kullanılması önerilir $(ve )bunun yerine, parantezler genişlemenin nerede başladığını ve bittiğini açıkça belirtirken, tekli geri tepmeler birinin nerede kaybolduğunu görmeyi zorlaştırır. Ve yuva yap ...). Devam isteminin diğer olası nedenleri:

  • Eksik donesonra whileyafor
  • fisonra bir eksikif
  • esacsonra bir eksikcase
  • eksik bir parantez, örneğin alt kabuklarda (cd $HOME; cat .bashrc)
  • borulama işleminden sonra kaybolan bir komut |ve koşullu çalıştırma ||ve &&( &sadece komutun arka planda çalışmasını sağladığından beri)
  • eksik bir kapanış teklifi ( 'veya ")

İlginç bir şekilde, }değişken bir genişlemeden sonra eksik bir ayraç ${da bir devam istemine neden olur, ancak eklenen alan nedeniyle başarısız olur:

$ echo ${
> PS2}
bash: ${
PS2}: bad substitution

2
Aynı şeyi tırnak kullanırken de olur :)
Steen Schütt

1
Kenar çubuğunda gördüğümde, bu sorunun cevabını zaten biliyordum ama çok güzel, derinlemesine bir cevap için fazladan, hayali bir + 1 vermek istedim. Bu, StackExchange sitelerini harika yapan içerik türüdür. Öyleyse ... Teşekkürler ve muhteşem olmaya devam edin.
Unkwntech

4

Bu, emirinizin henüz tamamlanmadığı anlamına gelir. Aslında, backtick karakteri, `bir satır içi komutu sınırlamak için kullanılır.

Örnek:

cd /tmp # Go to /tmp
pwd # Prints the current working  directory
ls `pwd` # Lists the content of the current working directory

0

Backtick komut değiştirmeyi başlatır / sonlandırır. Kabuk geri tepme içindeki komutu okur, sonuçları yorumlar ve bu sonuçları komuta yerleştirir. Örneğin:. ls which cp, hangi cp'nin çalıştırıldığına ve bu komutun sonucuna, yani / bin / cp, ls komutunun argümanı olarak kullanılacaktır. Bununla birlikte, bu davranış, daha açık ve okunabilir olan $ (cmd) komutunun yerine kullanılmasından yana kaldırılmıştır.

Cd `yazarken Kabuk, izlenecek bir komut bekliyor ve bir backtick ile yakın olacak.

Parantezler kullanılarak değişken genişleme durumunda, kabuk devam istemini sunar, çünkü bu destekler genişleme yapılmadan önce sözcüksel olarak değerlendirilir.

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.