Mevcut yol linux'un sh komut isteminde nasıl gösteriliyor (bash değil)?


43

Şu anda sadece "#" i gösteren sh komut satırında (bash shell değil) geçerli yolu görüntülemek istiyorum.

env PS1="$(whoami)@$(hostname):$(pwd)"

ve

set PS1="$(whoami)@$(hostname):$(pwd)"

içinde /etc/profile.

Ancak açıkça görüldüğü gibi bu, dizin değiştirildiğinde veya kullanıcı değiştiğinde yenilenmez. Lütfen bunu dinamik yapmanın bir yolunu önerin.


1
Her birinin $()ayrı bir program çalıştırdığını unutmayın ; daha hızlı ortam gibi değişkenleri, kullanmak olacaktır $LOGNAME, $HOSTNAMEve $PWDonun yerine.
— Grawity

Bir cevap, çift tırnak yerine tek tırnak kullanmaktı, ancak bu tam olarak doğru cevaptı. Gerçekten yapmak istediğin, istekte kullanılana kadar istemin içindeki kodun değerlendirilmesini ertelemek.
— MaasSql

Tek yapmanız gereken dışa aktarımı kullanmak "PS1 =" $ (whoami) @ $ (hostname): $ (pwd)> "sonra / etc / profile düzenleyin ve bu satırı sonuna ekleyin.
— SDsolar

Yanıtlar:


76

Çift tırnak içindeki komut değişimleri "hemen genişler. İsteğiniz için istediğiniz şey bu değil. Tek tırnak ', $PS1sonradan istemi görüntülerken yalnızca genişletilen değişiklikleri değiştirir . Dolayısıyla bu çalışması gerekir:

export PS1='$(whoami)@$(hostname):$(pwd)'

Her zamanki dolar işaretini ve isteğinizin sonunda bir boşluk istiyorsanız, sonuna ekleyin $(kaçmak gerekmez):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
Cevabınız 'set' olarak 'export' olarak değiştirildikten sonra bir tılsım gibi export PS1='$(whoami)@$(hostname):$(pwd)$'çalıştım /etc/profile. Teşekkür ederim.
— Bleamer

@Bleamer: setbenim için çalıştı (ama yerlisi yoktu sh). Ama exportkurulumuna uyması için onu değiştireceğim .
— mpy

2
Bunu kalıcı kılmanın bir yolu var mı? Şu anda her giriş yaptığımda bunu yapmak zorundayım. Teşekkürler!
— the.ufon

3
Bu çizgiyi /etc/profile(bakınız soru) veya ~/.profile?!
— mpy

+1, bununla birlikte sonunda sınırlayıcıya ihtiyaç duyacak. Olduğu gibi foo@localhost:/home/fools -la, kullanırken bir şey olsun ls -la.
— phresnel

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
Korkarım ki sh için değil bash kabuğu için çalışıyor, bunu \u@\h:\w>yaptığımda komut istemi olarak alıyorum
— Bleamer

1
Farklı bir sh sürümü olmalı; ilk satırdan görebileceğiniz gibi, sh 4.2'de benim için çalıştı.
— Jenny D,

1
Durum bu olabilir. Bu kabuk Meşgul Kutusundan. Teşekkür ederim. Yine de yardımın için teşekkür ederim.
— Bleamer

@ Blender, benim için çalışıyor BusyBox v1.19.4 built-in shell (ash).
— cjm

@Cjm yanıtı için teşekkür ederim, buna rağmen daha fazla kazmaktan kaçındığım halde.
— Bleamer

5

Bu komut benim için çalışıyor.

export PS1="\u@\h: \W:$"

Where
\ u = username
\ h = hostname
\ W Mevcut klasörün adı (tam yol değil)


W parametresi için +1
— Dimitry K

3

Birisi bazı renkler ekleyerek istemi pezevenk etmeyi düşünebilir. Örneğin:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1
Aradığım şey buydu. Umarım herkes hayattaki bazı renkleri sever :)
— Govind Kailas

En azından yaparım. ;)
— Arvid

1

Bir cevap, çift tırnak yerine tek tırnak kullanmaktı, ancak tam olarak doğru cevap bu değildi. Gerçekten yapmak istediğin, istekte kullanılana kadar istemin içindeki kodun değerlendirilmesini ertelemek.

set PS1="$(pwd)" 

istemini set komutundan itibaren çalışma dizinine ayarlar.

set PS1="\$(pwd)" 

$ (pwd) 'yi genişletmez. Bunun yerine, PS1 $ (pwd) değişmez değerine ayarlanır.

Bunu çalıştırarak sınayın / anlayın:

echo $PS1

. Dizesini görürseniz: $ pwd, komut isteminiz çalışır. Hazır bilgi yolunu görürseniz, bilgi istemi bozulur çünkü statik olarak ayarlanmıştır.


1

Cpanel'deki gibi ayarlamak için aşağıdaki komutu kullanın.

Dışa Aktar PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '


Teşekkürler! Yukarıdaki diğer seçeneklerin hiçbiri işe yaramadı. Bu yaptı. Beni çıldırtıyordu. Akıl sağlığımı kurtardığın için teşekkürler. HA!
— Lee_Str
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.