Pourquoi mon invite Linux affiche-t-elle un $, au lieu du nom et du chemin de connexion?

13

Sur l'un de mes serveurs, l'invite est [user @ host path] ... et je peux en fait appuyer sur "tab" pour remplir automatiquement le chemin.

Mais sur mon nouveau serveur Ubuntu, ce n'est qu'un signe dollar?

Alex
la source
1
Vous pouvez toujours taper pwdpour imprimer le nom du répertoire de travail actuel. Et dites-vous que la complétion de tabulation ne fonctionne pas non plus? (Sur certaines machines que j'utilise, je ne reçois cette brève invite que si je me connecte en tant que root, et je laisse volontiers cela en place comme un bel avertissement. Comme on a rarement, voire jamais, besoin de se connecter en tant que root: vous n'utilisez pas root , êtes-vous?)
Arjan
Alex pouvez-vous nous dire quelle distribution vous utilisez?
inverser
J'utilise Ubuntu.
Alex
La dernière Ubuntu? Et dites-vous que la complétion de tabulation ne fonctionne pas non plus?
Arjan
Vous semblez poser deux questions: pourquoi la tabulation ne remplit-elle pas automatiquement le chemin, et pourquoi l'invite n'est-elle qu'un signe dollar au lieu de [chemin utilisateur @ hôte]. Il est un peu difficile de voter pour les réponses car aucune ne répond aux deux.
Joseph Holsten

Réponses:

27

Puisque vous posez deux questions, je répondrai aux deux.

Pourquoi les chemins de fichiers de saisie semi-automatique ne sont-ils pas tabulés?

Parce que votre shell ne le prend pas en charge ou que la tabulation n'est pas activée.

Pour résoudre ce problème, vous devez d'abord découvrir ce qu'est votre shell. Sur la machine dont vous aimez la coque, exécutez

echo $SHELL

Vous pouvez voir le commun /bin/bash, ou quelque chose de moins commun comme /bin/tcsh, /bin/zshou autre chose entièrement.

Maintenant, vous pouvez changer votre shell sur la machine Ubuntu. Sur cette machine, assurez-vous d'abord que le shell souhaité existe. Étant donné que le shell peut ne pas être au même emplacement sur la machine Ubuntu que sur l'autre, vérifiez l'emplacement en tapant

 which bash

Cela vous donnera le chemin du shell que vous voulez, quelque chose comme /bin/bash, /usr/bin/bashou /usr/local/bin/bash. Bien sûr, si vous voulez un autre shell que bash, vous dites which tcsh, which zshou similaire.

Si vous ne voyez pas de chemin, mais que vous voyez à la place bash not found, vous devrez alors installer le package approprié, puis utiliser whichà nouveau pour savoir où le shell a été installé.

Avec le chemin de votre shell choisi, vous pouvez enfin changer votre shell en exécutant

chsh -s /bin/bash

remplacer /bin/bashpar le chemin approprié pour votre shell de choix.

Pourquoi l'invite est-elle un signe dollar au lieu de [user @ host path]?

En raison de vos variables d'environnement rapides $PS1, $PS2et ainsi de suite. Ces éléments ne sont généralement pas portables entre les coques, voici donc quelques liens pour les candidats potentiels:

basha un manuel complet , avec des pages sur les variables Bash (y compris PS1, & c) et l' impression d'une invite (qui décrit PROMPT_COMMANDle nom long de PS1). Ajoutez la ligne suivante à votre~/.bashrc

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

tcsha un manuel en ligne (juste sa page de manuel), avec une section sur les variables d'environnement prompt . Ajoutez la ligne suivante à votre~/.tcshrc

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

zsha un guide de l'utilisateur , avec un guide simple pour les invites , ainsi qu'un manuel , avec une référence très détaillée sur l' expansion des invites . Ajoutez la ligne suivante à votre~/.zshrc

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

Bash n'est pas le seul shell.

Votre problème pourrait être une simple question de ne pas avoir de .profile ou .bashrc qui définit PS1, ou il se pourrait que votre shell de connexion ne soit pas bash du tout.

Bash utilise gnu readlinepour des choses comme la complétion des onglets. C'est un sujet compliqué et readline a même son propre fichier de configuration par utilisateur.

Voir man bash, man shet man 3 readline. Bash répond --version. Sur de nombreux systèmes Linux, /bin/shn'est pas réellement bash, mais généralement une version paralysée de ash.

DigitalRoss
la source
1
pas dashau lieu de ash? je pensais avoir lu quelque chose comme ça
knittl
2
+1 pour ne pas avoir de .profile ou .bashrc - à moins qu'Alex n'ait initialement configuré son compte lors de l'installation d'Ubuntu, puis par défaut, les nouveaux utilisateurs n'ont pas de .bashrc / n'ont pas de jeu PS1.
Cory Plastek
4

je suppose que vous n'utilisez pas bash, mais sh et votre invite n'est pas définie correctement (si cela est même possible avec sh).

vous pouvez obtenir votre shell actuel en tapant: echo $SHELL

si vous voulez démarrer bash, tapez simplement bash

knittl
la source
Vous pouvez définir l'invite avec d'autres shells. Il n'y a pas d'obus appelé sh. L'écho $SHELLimprimera une variable d'environnement appelée SHELL. Cette variable d'environnement pointe simplement vers le shell et n'est définie que par bash. Il est à peu près inutile de déterminer quel shell est en cours d'exécution, car cela indique seulement, faiblement, qu'un parent du processus actuel peut avoir été bash.
DigitalRoss
eh bien, le nom du programme du shell est sh (dans / bin / sh). et oui, echo $ SHELL affichera la variable SHELL qui est généralement définie.
knittl
Tous les systèmes Unix ont un exécutable appelé /bin/sh, oui. Mais je ne connais aucun obus dont le nom est sh. Je peux penser ash, ksh, csh, bash, zshet tcsh. Le premier est l'habituel / bin / sh sur linux et NetBSD, le dernier est le shell FreeBSD habituel, et les autres sont des shells optionnels. De nombreux environnements de bureau changent le shell de connexion des utilisateurs en bash tout en laissant / bin / sh sous forme de cendre.
DigitalRoss
2
@DigitalRoss shest le shell Bourne. en.wikipedia.org/wiki/Bourne_shell Certains systèmes (Solaris) sont toujours livrés avec une version du shell Bourne qui n'est pas seulement une copie d'une des réimplémentations (ash, dash, bash, ksh, zsh).
Chris Johnsen
... et bash est connu sous le nom de "Bourne again shell", qui a hérité de certaines fonctionnalités de Bourne shell, csh et ksh.
inverser