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
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.
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
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
2
Vous devez définir une variable appelée PS1 sur l'un de vos scripts de connexion, par exemple / etc / profile ou ~ / .bashrc. Cela dépendra de votre distribution.
pwd
pour 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?)Réponses:
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
Vous pouvez voir le commun
/bin/bash
, ou quelque chose de moins commun comme/bin/tcsh
,/bin/zsh
ou 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
Cela vous donnera le chemin du shell que vous voulez, quelque chose comme
/bin/bash
,/usr/bin/bash
ou/usr/local/bin/bash
. Bien sûr, si vous voulez un autre shell que bash, vous diteswhich tcsh
,which zsh
ou 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 utiliserwhich
à 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
remplacer
/bin/bash
par 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
,$PS2
et ainsi de suite. Ces éléments ne sont généralement pas portables entre les coques, voici donc quelques liens pour les candidats potentiels:bash
a un manuel complet , avec des pages sur les variables Bash (y comprisPS1
, & c) et l' impression d'une invite (qui décritPROMPT_COMMAND
le nom long dePS1
). Ajoutez la ligne suivante à votre~/.bashrc
tcsh
a un manuel en ligne (juste sa page de manuel), avec une section sur les variables d'environnement prompt . Ajoutez la ligne suivante à votre~/.tcshrc
zsh
a 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
la source
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 readline
pour 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 sh
etman 3 readline
. Bash répond--version
. Sur de nombreux systèmes Linux,/bin/sh
n'est pas réellement bash, mais généralement une version paralysée deash
.la source
dash
au lieu deash
? je pensais avoir lu quelque chose comme çaje 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
la source
sh
. L'écho$SHELL
imprimera une variable d'environnement appeléeSHELL
. 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./bin/sh
, oui. Mais je ne connais aucun obus dont le nom estsh
. Je peux penserash
,ksh
,csh
,bash
,zsh
ettcsh
. 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.sh
est 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).Vous devez définir une variable appelée PS1 sur l'un de vos scripts de connexion, par exemple / etc / profile ou ~ / .bashrc. Cela dépendra de votre distribution.
Exemple: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
la source