Neden bash istemini (PS1) manuel olarak ayarlamak root'un # yerine $ 'a neden oluyor?


11

CentOS 6.4 kullanıyorum. Varsayılan olarak kök kullanıcının bilgi istemi #sembolü vardır, yani [root@myserver ~]# .

echo $PS1çıktılar [\u@\h \W]\$; Yaparsam ama PS1="[\u@\h \W]\$"(afaics şeyi değiştirmez olmalıdır), ben bir istem ile sonuna kadar böyle görünüyor: [root@myserver ~]$.

Neden kendim ayarlamaya çalıştığımda (sonuçta daha yararlı bir şeye değiştirmek istiyorum), $kelimenin tam anlamıyla yorumluyor mu? Bulduğum hemen hemen her sayfa (örneğin, Nasıl yapılır: Değiştir / Ayarla bash özel istemi (PS1) ) , kök kullanıcı için \$bir sonuç vermesi gerektiğini söylüyor #.


PS1=[\u@\h \W]\$döner -bash: W]$: command not found.
choroba

@ choroba ayy, üzgünüm, çift tırnak kapalı özledim, olması gerekirdi PS1="[\u@\h \W]\$".
stripybadger

Yanıtlar:


14

Sorunuzda, çizgiyi hiç alıntılamadığınız anlamına geliyorsunuz; bu açıkça yanlıştır, çünkü boşluk "PS1 = [\ u @ \ h" bağımsız değişken atamasını "\ W] \ $" komutundan ayırır. Lütfen her karakterin önemli olduğunu anlayın.

Her neyse, muhtemelen tek yaptığınız (') yerine çift tırnak (") kullanmaktır. Yazdıklarınızı yorumlayan kabuk söz konusu olduğunda çok farklı davranırlar. Çift tırnaklarla akıllıca şeyler yapmaya çalışırlar. Bu atama için \ u, \ h ve \ W hakkında özel bir şey olmadığından, dokunulmadan bırakılırlar; köşeli parantezlerin çeşitli yerlerde özel anlamları olabilir, ancak bu durumda, bu yüzden onlar da yerinde bırakılırlar, ancak a'nın $hepsi özel olan çeşitli anlamları olduğundan, \$sıra "dolar işaretinin özelliğini görmezden gel ve sadece orada bırak" olarak yorumlanır ve bu sıra ile değiştirilir daha fazla ayrıştırılmamış tek dolar işareti.PS1ve \$kabuk gerçek istemi oluşturduğunda sihirli bir sıra değil, gerçek bir dolar işareti olduğundan, etkin kullanıcıya bağımlı karakter değil, dolar işareti alırsınız. Gerçek ayrıştırma biraz daha karmaşıktır, ancak bu özel örnek için özü budur.

Ne yazdınız: PS1="[\u@\h \W]\$ "
Kabuğun atadığı: PS1 <- "[\u@\h \W]$ "
Ne istiyorsunuz: PS1 <- "[\u@\h \W]\$ "
Ne yazmalısınız:PS1='[\u@\h \W]\$ '

Daha sonra yapmanız gerekenler: Kabuk alıntılama hakkında daha fazla bilgi edinmek için bu öğretici gibi bir şey okuyun .


1
Evet, noktadaydın, çift tırnak kullanıyordum (orijinal sorudan onları özlediğim için özür dilerim), hatamı belirttiğin için teşekkürler.
stripybadger

Hiç değilse bunu nedense çift tırnak kullanma ihtiyacı, kullanım PS1="...\\\$"değişmez çifti sağlamak için \$saklanır PS1kabuk daha sonra yorumlamak için.
chepner

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.