'Terminalde tek tırnak girdiğimde başka bir moda geçiyor ve komutlar yürütülmüyor. Bu mod nedir ve ne zaman kullanıyoruz?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
'Terminalde tek tırnak girdiğimde başka bir moda geçiyor ve komutlar yürütülmüyor. Bu mod nedir ve ne zaman kullanıyoruz?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
')
Yanıtlar:
Etkili bir şekilde, kabuk tam bir komut / ifade ister ve bu nedenle bilgi PS2istemi dizesini görüntüler .
Gönderen man bash:
telkin
Etkileşimli olarak yürütülürken, bash bir komutu okumaya hazır olduğunda birincil istem PS1'i ve bir komutu tamamlamak için daha fazla giriş gerektiğinde ikincil istem PS2'yi görüntüler.
Ve bundan biraz önce:
PS2 The value of this parameter is expanded as with PS1 and used as the secondary prompt string. The default is ``> ''.
Bu nedenle, belgeleri okumaktan tahmin edebileceğiniz gibi, mermilerin farklı amaçlarla birden fazla istemi vardır. PS1İstemi senin olduğu root@sai:~#sen komutları girin normalde gösterir dizesi. >olduğu PS2istemi. Başkaları da var: PS3için selectkomut bloğu ve PS4birlikte ayıklama için set -xkomuta. Bu durumda daha çok ilgileniyoruz PS2.
Kabuğun PS2istemi göstermesinin birçok yolu vardır (ve yeni bir satırda bir komutun doldurulması gerekli olabilir). Aynı istem here-docyeniden yönlendirme gerçekleştirdiğinizde kullanılır (bu örnekte sonlandırma dizesini gördüğünüzde bir komutun tamamlandığı kabul edilir EOF):
$ cat <<EOF
> line one
> line two
> EOF
line one
line two
Çok uzun bir komutun devamı \, aynı istemin görünmesine neden olacak ve hemen (!) Yeni satır eklenerek yapılabilir :
$ echo Hello\
> World
HelloWorld
$ echo 'Hello\
> World'
Hello\
World
Yeni satırdan önce komut satırında dikey çizgiler, mantık işleçleri veya özel anahtar sözcükler göründüğünde, tüm son ifadeler girilene kadar komutun eksik olduğu kabul edilir:
$ echo Hello World |
> wc -l
1
$ echo Hello World &&
> echo "!"
Hello World
!
$ for i in $(seq 1 3); do
> echo "$i"
> done
1
2
3
$ if [ -f /etc/passwd ]
> then
> echo "YES"
> fi
YES
Sizin durumunuzda, tek bir alıntı tek tırnaklar arasındaki kelimenin tam anlamıyla yorumlanmasını gerektirir. Böylece, Zanna'nın işaret ettiği gibi, newline + ls+ newline'dan oluşan bir komuta giriyorsunuz . Bu tür yürütülebilir bir dosya adı bulunamaz (ve genellikle komut dosya adları yalnızca alfasayısal karakterlerin yanı sıra alt çizgi, tire ve noktalardan oluşmalıdır). İçlerinde özel karakterler içeren dosya adlarına sahip olmak mümkün olsa da, her zaman önlenir.
NOT : En örnekte görüldüğü gibi böyle bir davranışın Bourne benzeri dahil kabukları, özgüdür bash, dash(Ubuntu üzerinde o sembolik olarak edilir /bin/sh), kshve mksh. cshve türevleri bu şekilde davranmaz:
$ tcsh
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%
Ancak, etkileşimli modda daha fazla giriş gerektiğinde cshhala istem2? olarak yükselir :
$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3
What's the difference between <<, <<< and < < in bash?çevrimdışı / yanlış.
Kabuk sadece kapanış teklifini bekliyor. Girdiğinizde, genellikle yaptığı şeyi yapar ve girilen komutu yürütmeye çalışır.
Tırnak işaretleri kabuğun özel karakterleri yorumlamamasına neden olur, yani genişletmeler gerçekleştirilmez. Tek tırnak, özel karakterlerin tüm yorumunu tamamen bastırır. Normalde bir yeni satır komutları ayırır, ancak burada yeni satırları tırnak işareti ile komutun bir parçası olarak eklediniz.
Gibi bir komut <newline>ls<newline>olmadığı için bulunmaz.