Как отобразить текущий путь в командной строке в sh Linux (не Bash)?

43

Я хотел бы отобразить текущий путь в приглашении sh (не в оболочке bash), который в настоящее время просто показывает "#", я попытался с введением этого

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

а также

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

в /etc/profile.

Но, как очевидно, это не обновляется, когда изменяется каталог или пользователь. Пожалуйста, предложите способ сделать это динамичным.

Bleamer
источник
1
Обратите внимание, что каждый $()запускает отдельную программу; было бы быстрее использовать переменные окружения, такие как $LOGNAME, $HOSTNAMEи $PWDвместо.
Гравитация
Один из ответов состоял в том, чтобы использовать одинарные кавычки вместо двойных, однако это вполне полный правильный ответ. Что вы действительно хотите сделать, так это отложить оценку кода внутри вашего приглашения до его использования.
MaasSql
Все, что вам нужно, это использовать экспорт "PS1 =" $ (whoami) @ $ (имя хоста): $ (pwd)> ", затем отредактируйте / etc / profile и добавьте эту строку в конце.
SDsolar

Ответы:

76

Подстановки команд в двойных кавычках "раскрываются немедленно. Это не то, что вы хотите для вашего приглашения. Одинарные кавычки 'сохранят замены, в $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, а не для 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 Имя текущей папки (не полный путь)

rangsiman
источник
+1 для параметра \ W
Дмитрий К
3

Можно подумать, чтобы подтолкнуть подсказку, добавив несколько цветов. Например:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
Арвид
источник
1
Это то, что я искал. Я надеюсь, что все любят некоторые цвета в жизни :)
Говинд Кайлас
По крайней мере, я делаю. ;)
Арвид
1

Одним из ответов было использование одинарных кавычек вместо двойных, однако это не совсем правильный ответ. Что вы действительно хотите сделать, так это отложить оценку кода внутри вашего приглашения до его использования.

set PS1="$(pwd)" 

устанавливает приглашение в рабочий каталог с помощью команды set.

set PS1="\$(pwd)" 

НЕ расширяет $ (pwd). Вместо этого для PS1 установлено буквальное значение $ (pwd).

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

echo $PS1

, Если вы видите строку: $ pwd, ваш запрос работает. Если вы видите буквальный путь, приглашение не работает, поскольку оно статически установлено

MaasSql
источник
1

Используйте команду ниже, чтобы установить, как в cpanel.

экспорт PS1='$(whoami)@$ enjHOSTNAME%%.*} [$ (pwd)] # '

Милан
источник
Благодарность! Ни один из других вариантов выше не работал. Этот сделал. Сводил меня с ума. Спасибо за сохранение моего здравомыслия. ХА!
Lee_Str