Чому в моєму Linux-запиті відображається $, а не ім’я та шлях входу?


13

На одному з моїх серверів підказки є [user @ host path] ... і я можу насправді натиснути "вкладку", щоб автоматично заповнити шлях.

Але на моєму новому сервері Ubuntu це лише знак долара?


1
Ви завжди можете набрати pwdдрук імені поточного робочого каталогу. А ви хочете сказати, що і завершення вкладки не працює? (На деяких машинах, які я використовую, я отримую це коротке підказку лише в тому випадку, якщо я ввійду як корінь, і я щасливо залишаю це на місці, як приємне попередження. Оскільки рідко, якщо взагалі, потрібно входити як root: ви не використовуєте root , ти?)
Арджан

Алекс, ти можеш сказати нам, який дистрибутив ти використовуєш?
інвертувати

Я використовую Ubuntu.
Олексій

Останній Ubuntu? А ви хочете сказати, що і завершення вкладки не працює?
Ар’ян

Здається, ви задаєте два питання: чому вкладка не заповнює автоматично шлях і чому підказка є лише знаком долара замість [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 Variables (включаючи 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 використовує gnu 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.
Cory Plastek

4

я здогадуюсь, ви не використовуєте bash, але sh і ваш запит не встановлений належним чином (якщо це можливо навіть з sh).

ви можете отримати свою поточну оболонку, ввівши: echo $SHELL

якщо ви хочете почати bash, просто введіть bash


Ви можете встановити підказку за допомогою інших оболонок. Оболонки не називається sh. Echoing $SHELLнадрукує змінну середовища, що називається SHELL. Ця змінна середовище просто вказує на оболонку і встановлюється лише bash. Приблизно марно визначати, яка оболонка запущена, як це лише слабо вказує на те, що якийсь з батьків поточного процесу, можливо, був баш.
DigitalRoss

добре, назва програми shell - sh (in / bin / sh). і так, echo $ SHELL надрукує змінну SHELL, яку зазвичай встановлюють.
knittl

Кожна система Unix має виконувану назву /bin/sh, так. Але я не знаю жодної оболонки, чиє ім’я sh. Я можу думати ash, ksh, csh, bash, zsh, і tcsh. Перший - це звичайний / bin / sh для Linux та NetBSD, останній - звичайна оболонка FreeBSD, а інші - необов'язкові оболонки. У багатьох середовищах робочого столу змінюється оболонка для входу користувачів на бешкет, залишаючи / bin / sh як золу.
DigitalRoss

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

... а bash відомий як "оболонка Bourne знову", яка успадкувала деякі особливості від оболонки 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.