2013-05-29 09:56:16 +0000 2013-05-29 09:56:16 +0000
43
43

Jak wyświetlić aktualną ścieżkę w wierszu poleceń w sh (nie bash) linuksa?

Chciałbym wyświetlić aktualną ścieżkę w wierszu poleceń w sh (nie bash shell), który obecnie pokazuje tylko “#”, próbowałem wprowadzić ten

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

i

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

w /etc/profile.

Ale jak widać nie odświeża się to przy zmianie katalogu lub zmianie użytkownika. Proszę zasugerować sposób, aby uczynić to dynamicznym.

Odpowiedzi (6)

77
77
77
2013-05-29 10:05:04 +0000

Podmiany komend w podwójnych kwotowaniach " są natychmiast rozszerzane. To nie jest to, czego oczekujesz od swojego podpowiedzi. Pojedyncze cudzysłowy ' zachowują zmiany w $PS1, które są interpretowane tylko podczas wyświetlania zachęty. Dlatego też powinno to zadziałać:

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

Jeśli chcesz mieć zwykły znak dolara i spację na końcu zachęty, po prostu dodaj $ na końcu (nie ma potrzeby uciekać): export PS1='$(whoami)@$(hostname):$(pwd)$ '

14
14
14
2013-05-29 10:07:44 +0000
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
5
5
5
2017-06-25 05:27:44 +0000

Ta komenda działa dla mnie.

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

Gdzie \u = nazwa użytkownika \h = nazwa hosta \W Nazwa obecnego folderu (nie pełna ścieżka)

3
3
3
2018-11-23 13:35:39 +0000

Można rozważyć suteneryzowanie zachęty poprzez dodanie kilku kolorów. Na przykład:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
1
1
1
2015-10-21 12:29:41 +0000

Użyj poniższego polecenia, aby ustawić jest jak w cpanelu.

export PS1=‘$(whoami)@${HOSTNAME%%.*} [$(pwd)]#

1
1
1
2014-10-27 14:49:59 +0000

Jedną z odpowiedzi było użycie pojedynczych cudzysłowów zamiast cudzysłowów podwójnych, jednak nie jest to w pełni poprawna odpowiedź. To, co naprawdę chcesz zrobić, to odłożyć ocenę kodu wewnątrz zachęty, aż do momentu użycia zachęty.

set PS1="$(pwd)"

ustawia zachętę do katalogu roboczego, tak jak w poleceniu set.

set PS1="\$(pwd)"

nie rozwija $(pwd). Zamiast tego, PS1 jest ustawiane na wartość dosłowną $(pwd).

Test / Zrozum to przez wykonanie:

echo $PS1

. Jeśli zobaczysz łańcuch : $pwd, twój znak zachęty zadziała. Jeśli widzisz ścieżkę dosłowną, zachęta jest łamana, ponieważ została ustawiona statycznie