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.