Почему в моем приглашении Linux вместо имени пользователя и пути отображается $?


13

На одном из моих серверов это приглашение [user @ host path] ... и я могу нажать «tab» для автоматического заполнения пути.

Но на моем новом сервере Ubuntu это просто знак доллара?


1
Вы всегда pwdможете напечатать имя текущего рабочего каталога. И вы говорите, что Tab-завершение тоже не работает? (На некоторых машинах, которые я использую, я получаю это короткое приглашение, только если я вхожу в систему как root, и я с радостью оставляю это как хорошее предупреждение. Поскольку редко, если когда-либо, нужно войти в систему как root: вы не используете root , ты?)
Арьян

Алекс, расскажи нам, какой дистрибутив ты используешь?
инвертировать

Я использую Ubuntu.
Alex

Последний Ubuntu? И вы говорите, что Tab-завершение тоже не работает?
Арьян

Похоже, вы задаете два вопроса: почему не вкладка автоматически заполняет путь, и почему подсказка просто знак доллара вместо [user @ host path]. Немного сложно проголосовать за ответы, так как никто не отвечает на оба.
Джозеф Холстен

Ответы:


27

Поскольку вы задаете два вопроса, я отвечу на оба.

Почему не вкладки автозаполнения пути к файлам?

Потому что ваша оболочка либо не поддерживает ее, либо завершение табуляции не включено.

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

echo $SHELL

Вы можете увидеть общее /bin/bash, или что-то менее общее, как /bin/tcsh, /bin/zshили что-то еще полностью.

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

 which bash

Это даст вам путь оболочки вы хотите, что - то вроде /bin/bash, /usr/bin/bashили /usr/local/bin/bash. Конечно, если вы хотите оболочку, кроме Баша, вы будете говорить which tcsh, which zshили аналогичные.

Если вы не видите путь, но вместо этого видите bash not found, то вам нужно установить соответствующий пакет и снова использовать, whichчтобы узнать, где была установлена ​​оболочка.

Используя путь выбранной вами оболочки, вы можете, наконец, изменить свою оболочку, запустив

chsh -s /bin/bash

замена /bin/bashна любой подходящий путь для вашей оболочки по выбору.

Почему вместо [user @ host path] отображается знак доллара?

Из - за ваше быстрое переменное окружение $PS1, $PS2и так далее. Эти вещи не всегда переносимы между оболочками, поэтому вот несколько ссылок для вероятных кандидатов:

bashсодержит обширное руководство со страницами, посвященными переменным Bash (включая PS1& c) и « Печать приглашения» (в котором описано PROMPT_COMMANDдлинное имя PS1). Добавьте следующую строку в ваш~/.bashrc

export PS1='[\u@\h \w] '

tcshесть электронное руководство (только его справочная страница) с разделом о переменных среды подсказки . Добавьте следующую строку в ваш~/.tcshrc

set prompt='[%n@%m %~] '

zshимеет руководство пользователя с простым руководством к подсказкам , а также руководство с очень подробным справочником по расширению подсказок . Добавьте следующую строку в ваш~/.zshrc

export PS1='[%n@%m %~] '

6

Баш не единственная оболочка.

Ваша проблема может заключаться в том, что у вас нет .profile или .bashrc, который устанавливает PS1, или в том, что ваша оболочка входа в систему вообще не является bash.

Bash использует gnu readlineдля таких вещей, как завершение вкладки. Это сложная тема, и readline даже имеет собственный конфигурационный файл для каждого пользователя.

См man bash, man shи man 3 readline. Баш отвечает на --version. Во многих системах Linux /bin/shэто не bash, а обычно ограниченная версия ash.


1
не dashвместо ash? я думал, что прочитал что-то вроде этого
knittl

2
+1 за отсутствие .profile или .bashrc - если Алекс изначально не настроил свою учетную запись при установке Ubuntu, то по умолчанию новые пользователи не имеют .bashrc / не имеют PS1.
Кори Пластек

4

я думаю, вы не используете bash, но sh и ваше приглашение не настроено должным образом (если это возможно даже с sh).

вы можете получить текущую оболочку, набрав: echo $SHELL

если вы хотите запустить bash, просто наберите bash


Вы можете установить подсказку с другими оболочками. Там не называется оболочка sh. Echoing $SHELLнапечатает переменную окружения с именем SHELL. Эта переменная окружения просто указывает на оболочку и устанавливается только bash. Приблизительно бесполезно определять, какая оболочка запущена, поскольку лишь слабо указывает на то, что какой-то родительский элемент текущего процесса мог быть bash.
DigitalRoss

хорошо, имя программы оболочки - sh (в / bin / sh). и да, echo $ SHELL напечатает переменную SHELL, которая обычно устанавливается.
Knittl

У каждой системы Unix есть исполняемый файл с именем /bin/sh, да. Но я не знаю ни одной оболочки, которую зовут sh. Я могу думать ash, ksh, csh, bash, zsh, и tcsh. Первый - это обычный / bin / sh в Linux и NetBSD, последний - обычная оболочка FreeBSD, а остальные - необязательные оболочки. Многие окружения рабочего стола изменяют оболочку входа пользователей на bash, оставляя / bin / sh как ash.
DigitalRoss

2
@DigitalRoss sh- оболочка Борна. en.wikipedia.org/wiki/Bourne_shell Некоторые системы (Solaris) все еще поставляются с версией оболочки Bourne, которая не является просто копией одной из повторных реализаций (ash, dash, bash, ksh, zsh).
Крис Джонсен

... и bash известен как "оболочка Bourne again", которая унаследовала некоторые функции от оболочки Bourne, csh и ksh.
инвертировать

2

Вам необходимо установить переменную с именем PS1 в одном из ваших сценариев входа в систему, например / etc / profile или ~ / .bashrc. Это будет зависеть от вашего распространения.

Пример: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html


не обязательно .bashrc, поскольку он может использовать оболочку, отличную от bash
knittl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.