Як відобразити поточний шлях у командному рядку в l-м Linux (не bash)?


42

Я хотів би відобразити поточний шлях у підказці sh (не bash shell), яка наразі просто показує "#", я намагався ввести це

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

і

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

в /etc/profile.

Але як очевидно, це не оновлюється при зміні каталогу або зміні користувача. Підкажіть, будь ласка, спосіб зробити це динамічним.


1
Зауважте, що кожен $()запускає окрему програму; було б швидше використовувати змінні середовища, наприклад $LOGNAME, $HOSTNAMEі $PWDнатомість.
grawity

Одна відповідь полягала в тому, щоб використовувати подвійні лапки замість подвійних лапок, однак це цілком повна правильна відповідь. Те, що ви дійсно хочете зробити, - це відкласти оцінку коду всередині вашого підказки, поки не буде використане підказка.
MaasSql

Все, що вам потрібно, це скористатися експортом "PS1 =" $ (whoami) @ $ (ім'я хоста): $ (pwd)> ", а потім відредагувати / etc / profile та додати цей рядок в кінці.
SDsolar

Відповіді:


75

Заміни команд у подвійних лапках "негайно розширюються. Це не те, що потрібно для вашого підказу. Одиночні лапки 'зберігатимуть підстановки, в $PS1яких потім лише розширюються при відображенні запиту. Отже, це має працювати:

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

Якщо ви хочете звичайний знак долара та пробіл в кінці підказки, просто додайте його $в кінці (не потрібно бігти):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
Працюючи як шарм, змінивши у своїй відповіді "встановити" на "експорт", export PS1='$(whoami)@$(hostname):$(pwd)$'я врятував зміни /etc/profile. Дякую.
Блеамер

@Bleamer: setпрацював на мене (але у мене не було рідного sh). Але я зміню його, exportщоб відповідати вашим налаштуванням.
mpy

2
Чи є спосіб зробити це постійним? На даний момент я маю це робити кожного разу, коли входжу. Дякую!
the.ufon

3
Ви поставили цей рядок /etc/profile(див. Питання) чи ~/.profile?!
mpy

+1, однак для цього знадобиться деякий роздільник. Так само, ви отримуєте щось на зразок foo@localhost:/home/fools -laпід час використання ls -la.
фреснель

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

1
Боюся, що працює для bash shell не для sh, коли я це роблю, я отримую \u@\h:\w>як моє командне повідомлення
Bleamer

1
Повинна бути інша версія ш; як ви бачите з першого рядка, він працював для мене в sh 4.2.
Дженні Д

1
Це може бути так. Ця оболонка - від Busy Box. Дякую. Хоча вдячний за вашу допомогу.
Блеамер

@Bleamer, для мене це працює BusyBox v1.19.4 built-in shell (ash).
cjm

Дякую за відповідь @cjm, хоча я уникатиму дальших пошуків.
Блеамер

5

Ця команда працює для мене.

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

Де
\ u = ім'я користувача
\ h = ім'я хоста
\ W Назва поточної папки (не повний шлях)


Параметр +1 для \ W
Dimitry K

1

Одна відповідь полягала в тому, щоб використовувати подвійні лапки замість подвійних лапок, однак це не зовсім повна правильна відповідь. Те, що ви насправді хочете зробити, - це відкласти оцінку коду всередині вашого підказки, поки не буде використаний рядок

set PS1="$(pwd)" 

встановлює підказку в робочий каталог станом на команду set.

set PS1="\$(pwd)" 

НЕ розширює $ (pwd). Натомість PS1 встановлюється в прямому значенні $ (pwd).

Перевірте / зрозумійте це, запустивши:

echo $PS1

. Якщо ви бачите рядок: $ pwd, ваше запит працює. Якщо ви бачите буквальний шлях, запит порушується, оскільки він був статично встановлений


1

Використовуйте команду нижче, щоб встановити, як у cpanel.

експортувати PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '


Дякую! Жоден з інших варіантів вище не працював. Цей і зробив. Зводив мене з розуму. Дякуємо, що зберегли мою розум. ХА!
Lee_Str

1

Можна розглянути сутенер підказки, додавши кілька кольорів. Наприклад:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.