Por que meu prompt do Linux mostra $, em vez do nome e caminho de login?

13

Em um dos meus servidores, o prompt é [user @ host path] ... e eu posso realmente pressionar "tab" para preencher automaticamente o caminho.

Mas no meu novo servidor Ubuntu, é apenas um cifrão?

Alex
fonte
1
Você sempre pode digitar pwdpara imprimir o nome do diretório de trabalho atual. E você está dizendo que o preenchimento de guias também não está funcionando? (Em algumas máquinas que eu uso, recebo esse breve prompt apenas se eu fizer login como root e, felizmente, deixo isso como um bom aviso. Como raramente, se é que alguma vez, é necessário fazer login como root: você não está usando root , é você)?
Arjan
Alex, você pode nos dizer qual distro você está usando?
Invert '
Estou usando o Ubuntu.
1028 Alex
O ultimo Ubuntu? E você está dizendo que o preenchimento de guias também não está funcionando?
Arjan
Você parece estar fazendo duas perguntas: por que a guia não preenche automaticamente o caminho e por que o prompt é apenas um cifrão em vez de [caminho do usuário @ host]. É um pouco difícil votar em respostas, pois nenhuma responde a ambas.
21119 Joseph Holsten

Respostas:

27

Como você está fazendo duas perguntas, eu responderei as duas.

Por que a guia não preenche automaticamente os caminhos de arquivo?

Como o shell não é compatível ou a conclusão da guia não está ativada.

Para resolver isso, primeiro você precisa descobrir qual é o seu shell. Na máquina cujo shell você gosta, execute

echo $SHELL

Você pode ver o comum /bin/bash, ou algo menos comum /bin/tcsh, /bin/zshou algo completamente diferente.

Agora, você pode alterar seu shell na máquina Ubuntu. Nessa máquina, primeiro verifique se o shell que você deseja existe. Como o shell pode não estar no mesmo local na máquina Ubuntu e no outro, verifique o local digitando

 which bash

Isto lhe dará o caminho do shell que você quer, algo como /bin/bash, /usr/bin/bashou /usr/local/bin/bash. Claro, se você quer um shell diferente do bash, você vai dizer which tcsh, which zshou similar.

Se você não vir um caminho, mas sim bash not found, então precisará instalar o pacote apropriado e usar novamente whichpara descobrir onde o shell foi instalado.

Com o caminho do seu shell escolhido, você pode finalmente mudar seu shell executando

chsh -s /bin/bash

substituindo /bin/bashpor qualquer que seja o caminho apropriado para o seu shell de escolha.

Por que o prompt é um cifrão em vez de [user @ host path]?

Por causa de suas variáveis de ambiente rápidas $PS1, $PS2e assim por diante. Como essas coisas não costumam ser portáveis ​​entre as conchas, aqui estão alguns links para possíveis candidatos:

bashpossui um manual extenso , com páginas sobre variáveis ​​bash (incluindo PS1, etc.) e Printing a Prompt (que descreve PROMPT_COMMANDo nome longo para PS1). Adicione a seguinte linha ao seu~/.bashrc

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

tcshpossui um manual on - line (apenas sua página de manual ), com uma seção sobre variáveis ​​de ambiente de prompt . Adicione a seguinte linha ao seu~/.tcshrc

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

zshpossui um guia do usuário , com um guia simples de prompts e um manual , com uma referência muito detalhada sobre expansão de prompt . Adicione a seguinte linha ao seu~/.zshrc

export PS1='[%n@%m %~] '
Joseph Holsten
fonte
6

Bash não é a única concha.

Seu problema pode ser uma simples questão de não ter um .profile ou .bashrc que defina o PS1, ou pode ser que o seu shell de logon não seja de todo.

O Bash usa gnu readlinepara coisas como conclusão de guias. Este é um assunto complicado e a linha de leitura ainda tem seu próprio arquivo de configuração por usuário.

Ver man bash, man she man 3 readline. Bash responde --version. Em muitos sistemas linux, /bin/shnão é realmente bash, mas geralmente uma versão aleijada do ash.

DigitalRoss
fonte
1
não em dashvez de ash? eu pensei que eu li algo assim
knittl
2
+1 por não ter um .profile ou .bashrc - a menos que Alex tenha configurado sua conta quando instalou o Ubuntu, então, por padrão, novos usuários não têm um .bashrc / não têm o PS1 definido.
Cory Plastek
4

Eu acho que você não está usando o bash, mas sh e seu prompt não está definido corretamente (se isso é possível com sh).

você pode obter seu shell atual digitando: echo $SHELL

se você deseja iniciar o bash, basta digitar bash

knittl
fonte
Você pode definir o prompt com outras conchas. Não existe um shell chamado sh. O eco $SHELLimprimirá uma variável de ambiente chamada SHELL. Essa variável de ambiente simplesmente aponta para o shell e é definida apenas pelo bash. É praticamente inútil determinar qual shell está sendo executado, pois apenas indica, fracamente, que algum pai do processo atual pode ter sido danificado.
DigitalRoss
bem, o nome do programa do shell é sh (em / bin / sh). e sim, echo $ SHELL imprimirá a variável SHELL que geralmente é definida.
knittl
Todo sistema unix tem um executável chamado /bin/shsim. Mas não conheço nenhuma concha cujo nome seja sh. Eu posso pensar de ash, ksh, csh, bash, zsh, e tcsh. O primeiro é o usual / bin / sh no linux e no NetBSD, o último é o shell FreeBSD usual, e os outros são shells opcionais. Muitos ambientes de desktop alteram o shell de login do usuário para bash, deixando / bin / sh como ash.
DigitalRoss
2
@DigitalRoss shé o shell Bourne. pt.wikipedia.org/wiki/Bourne_shell Alguns sistemas (Solaris) ainda vêm com uma versão do shell Bourne que não é apenas uma cópia de uma das reimplementações (ash, dash, bash, ksh, zsh).
31720 Chris Johnsen
... e o bash é conhecido como "Bourne again shell", que herdou alguns recursos do Bourne shell, csh e ksh.
Invert '
2

Você precisa definir uma variável chamada PS1 em um dos seus scripts de login, por exemplo / etc / profile ou ~ / .bashrc. Depende da sua distribuição.

Exemplo: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Palantir
fonte
não necessariamente .bashrc desde que ele pode usar um shell diferente do que o bash
knittl