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

Hoe kan ik het huidige pad weergeven in de commando prompt in linux's sh (niet bash)?

Ik wil graag het huidige pad weergeven in de sh prompt (niet bash shell), die op dit moment alleen “#” toont, ik heb geprobeerd met de introductie van deze

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

en

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

in /etc/profile.

Maar als vanzelfsprekend wordt dit niet ververst wanneer de directory wordt gewijzigd of de gebruiker verandert. Suggereer een manier om dit dynamisch te maken.

Antwoorden (6)

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

Commandowissels in dubbele aanhalingstekens " worden onmiddellijk uitgebreid. Dat is niet wat u wilt voor uw prompt. Enkele aanhalingstekens ' zullen de substituties in $PS1 behouden, die dan alleen worden uitgebreid bij het weergeven van de prompt. Dit zou dus moeten werken:

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

Als u het gebruikelijke dollarteken en een spatie aan het eind van uw prompt wilt, voeg dan gewoon $ toe aan het eind (geen ontsnapping nodig): 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

Dit commando werkt voor mij.

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

Waar \u = gebruikersnaam \h = hostnaam W Naam van de huidige map (niet volledig pad)

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

Men zou kunnen overwegen om de prompt te pimpen door wat kleuren toe te voegen. Bijvoorbeeld:

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

Gebruik het onderstaande commando om in te stellen is als in het paneel.

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

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

Een van de antwoorden was het gebruik van enkele aanhalingstekens in plaats van dubbele aanhalingstekens, maar dat is niet helemaal het juiste antwoord. Wat je echt wilt doen is de evaluatie van de code in je prompt uitstellen totdat de prompt wordt gebruikt.

set PS1="$(pwd)"

stelt de prompt in op de werkmap vanaf het ingestelde commando.

set PS1="\$(pwd)"

breidt GEEN $(pwd) uit. In plaats daarvan wordt PS1 ingesteld op de letterlijke waarde van $(pwd).

Test / Begrijp dit door:

echo $PS1

te draaien. Als je de string : $pwd ziet, werkt je prompt. Als je het letterlijke pad ziet, is de prompt kapot omdat deze statisch is ingesteld.