Perché il mio prompt di Linux mostra $, anziché il nome e il percorso di accesso?


13

Su uno dei miei server, il prompt è [percorso utente @ host] ... e posso effettivamente premere "tab" per riempire automaticamente il percorso.

Ma sul mio nuovo server Ubuntu, è solo un segno di dollaro?


1
È sempre possibile digitare pwdper stampare il nome della directory di lavoro corrente. E stai dicendo che neanche il completamento con Tab non funziona? (Su alcune macchine che utilizzo, ricevo quel breve prompt solo se eseguo il login come root e li lascio felicemente sul posto come un bel avvertimento. Come raramente, se mai, è necessario accedere come root: non si sta usando root , vero?)
Arjan,

Alex, puoi dirci quale distro stai usando?
inverti il

Sto usando Ubuntu.
Alex,

L'ultima Ubuntu? E stai dicendo che neanche il completamento con Tab non funziona?
Arjan,

Sembra che tu stia ponendo due domande: perché la scheda non riempie automaticamente il percorso e perché il prompt è solo un segno di dollaro anziché [percorso utente @ host]. È un po 'difficile votare per le risposte poiché nessuno risponde ad entrambi.
Joseph Holsten,

Risposte:


27

Dato che stai ponendo due domande, risponderò ad entrambe.

Perché la scheda non completa automaticamente i percorsi dei file?

Poiché la shell non lo supporta o il completamento della scheda non è attivato.

Per risolvere questo, devi prima scoprire qual è la tua shell. Sulla macchina di cui ti piace la shell, corri

echo $SHELL

Potresti vedere il comune /bin/bash, o qualcosa di meno comune /bin/tcsh, /bin/zsho qualcos'altro del tutto.

Ora puoi cambiare la shell sulla macchina Ubuntu. Su quella macchina, assicurati innanzitutto che la shell desiderata esista. Poiché la shell potrebbe non trovarsi nella stessa posizione sul computer Ubuntu dell'altra, controllare la posizione digitando

 which bash

Questo vi darà il percorso della shell che si desidera, qualcosa di simile /bin/bash, /usr/bin/basho /usr/local/bin/bash. Naturalmente, se si vuole una shell diversa da bash, direte which tcsh, which zsho simili.

Se non vedi un percorso, ma invece vedi bash not found, allora dovrai installare il pacchetto appropriato e usarlo di nuovo whichper scoprire dove è stata installata la shell.

Con il percorso della shell prescelta, puoi finalmente cambiare la shell eseguendo

chsh -s /bin/bash

sostituendo /bin/bashcon qualunque sia il percorso appropriato per la tua shell preferita.

Perché il prompt è un simbolo di dollaro anziché [percorso utente @ host]?

A causa delle variabili di ambiente tempestive $PS1, $PS2e così via. Queste cose non tendono ad essere portatili tra le shell, quindi ecco alcuni link per i probabili candidati:

bashha un ampio manuale , con pagine sulle variabili Bash (incluso PS1, ecc.) e Stampa di un prompt (che descrive PROMPT_COMMANDil nome lungo per PS1). Aggiungi la seguente riga alla tua~/.bashrc

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

tcshha un manuale online (solo la sua pagina man), con una sezione sulle variabili d'ambiente del prompt . Aggiungi la seguente riga alla tua~/.tcshrc

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

zshha una guida per l'utente , con una semplice guida alle istruzioni , nonché un manuale , con un riferimento molto dettagliato sull'espansione rapida . Aggiungi la seguente riga alla tua~/.zshrc

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

6

Bash non è l'unica shell.

Il tuo problema potrebbe essere una semplice questione di non avere un .profile o .bashrc che imposta PS1, o potrebbe essere che la tua shell di accesso non sia affatto bash.

Bash usa gnu readlinecose come il completamento delle schede. Questo è un argomento complicato e readline ha anche il suo file di configurazione per utente.

Vedi man bash, man she man 3 readline. Bash risponde a --version. Su molti sistemi Linux, in /bin/shrealtà non è bash, ma di solito una versione paralizzata di ash.


1
non dashinvece di ash? pensavo di aver letto qualcosa del genere
knittl

2
+1 per non avere un .profile o .bashrc - a meno che Alex non abbia inizialmente impostato il suo account quando ha installato Ubuntu, quindi per impostazione predefinita, i nuovi utenti non hanno un .bashrc / non hanno PS1 impostato.
Cory Plastek,

4

suppongo che non stai usando bash, ma sh e il tuo prompt non è impostato correttamente (se ciò è possibile anche con sh).

puoi ottenere la tua shell corrente digitando: echo $SHELL

se vuoi iniziare bash, basta digitare bash


È possibile impostare il prompt con altre shell. Non c'è nessuna shell chiamata sh. L'eco $SHELLstamperà una variabile d'ambiente chiamata SHELL. Questa variabile d'ambiente punta semplicemente alla shell ed è impostata solo da bash. È quasi inutile nel determinare quale shell è in esecuzione, poiché indica, debolmente, che alcuni genitori del processo corrente potrebbero essere stati bash.
DigitalRoss,

bene, il nome del programma della shell è sh (in / bin / sh). e sì, echo $ SHELL stamperà la variabile SHELL che di solito è impostata.
Knittl,

Ogni sistema unix ha un eseguibile chiamato /bin/shsì. Ma non conosco nessuna shell il cui nome è sh. Mi viene in mente ash, ksh, csh, bash, zsh, e tcsh. Il primo è il solito / bin / sh su Linux e NetBSD, l'ultimo è la solita shell di FreeBSD, e gli altri sono shell opzionali. Molti ambienti desktop cambiano la shell di login degli utenti in bash lasciando / bin / sh come ash.
DigitalRoss,

2
@DigitalRoss shè la shell Bourne. en.wikipedia.org/wiki/Bourne_shell Alcuni sistemi (Solaris) sono ancora dotati di una versione della shell Bourne che non è solo una copia di una delle implementazioni (ash, dash, bash, ksh, zsh).
Chris Johnsen,

... e bash è noto come "Bourne again shell", che ha ereditato alcune funzionalità da Bourne shell, csh e ksh.
inverti il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.