Insérer une ligne vide entre les invites de ligne de commande

8

Lorsque vous utilisez la ligne de commande, elle est souvent très encombrée. Par exemple, il n'est pas pratique d'examiner les commandes passées et leurs sorties.

Je voudrais avoir une nouvelle ligne ajoutée à chaque fois avant que l'invite de commande ne s'affiche. Ainsi:

<clutter>
<blank line>
name@machine:~$

J'utilise le shell bash. Comment cela peut il etre accompli?

Slothworks
la source
1
Je préfère ceci: lifehacker.com/5840450/…
Maerlyn

Réponses:

21

Une façon d'y parvenir consiste à modifier le .bashrcfichier. Placez simplement ce qui suit à la fin du .bashrcfichier.

PS1="\n$PS1"

Pour expliquer comment cela fonctionne, PS1la variable contenant ce qui doit être affiché comme invite. Tout cela veut dire "est mis PS1au contenu précédent de PS1, avec un caractère de nouvelle ligne ajouté". Le .bashrcplacer dans la plupart des distributions fait simplement que bash l'exécute chaque fois que vous ouvrez un shell interactif (mais pas un shell de connexion - voir Différence entre le shell de connexion et le shell sans connexion? ).

Slothworks
la source
2
Pour expliquer comment cela fonctionne, PS1 est la variable contenant ce qui doit être affiché comme invite. Tout cela veut dire "mettre PS1 au contenu précédent de PS1, avec un caractère de nouvelle ligne ajouté".
Muzer
@Muzer Peut-être que votre commentaire pourrait être une modification
rpax
@rpax bonne idée, soumise. Ajout d'un peu sur .bashrc lui aussi.
Muzer
De manière satisfaisante, l'exécution PS1="\n$PS1"dans un terminal a un effet instantané :)
mwfearnley
Fonctionne parfaitement, sauf après avoir entré clear(ou appuyé Ctrl+l) la première ligne affichée est une ligne vide. Pour certains, cela peut être un petit détail, mais je préférerais de beaucoup que la première ligne soit l'invite.
Robert Kusznier
6

Vous pouvez utiliser PROMPT_COMMAND :

PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"

ou:

PROMPT_COMMAND="echo;$PROMPT_COMMAND"
cuonglm
la source
2
Le premier devrait-il être PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"? Dans sa forme actuelle, il ne semblait rien faire quand je l'ai placé dans le .bashrcdossier.
Slothworks
@ Slothworks: Oui, bien sûr, ma faute de frappe l'a corrigé.
cuonglm
Plus d'une façon de le faire en effet :) Merci pour votre réponse.
Slothworks
2
L'alternative de Slothworks est meilleure, car la vôtre exécute une commande supplémentaire après chaque commande exécutée sur la ligne de commande. printfet echosont très légers, bien sûr, mais cela n'a toujours pas de sens d'utiliser PROMPT_COMMANDquand PS1fera le travail.
Mikkel
Notez que si vous souhaitez mettre quelque chose dans la commande qui change à chaque fois que vous exécutez l'invite, vous voulez PROMPT_COMMAND et non PS1. Ceci est couramment utilisé avec git pour afficher quelle branche du dépôt est active. Google pour PROMPT_COMMAND suggestions pour voir ce qui peut être fait.
Walter
4

Alternative: laissez une ligne à l' PS1=invite de votre .bashrc. Voici littéralement comment j'installe .bashrcsur chaque machine Linux que j'ai:

PS1=' 
serg@ubuntu [$(pwd)]
================================
$ '

Comme vous le voyez dans mon exemple ci-dessus, le nom d'utilisateur est codé en dur dans l'invite. Vous pouvez bien sûr utiliser des séquences d'échappement fournies par bash ou un autre shell (par exemple ksh ), mais une option un peu plus neutre consisterait à utiliser la substitution de paramètres avec des commandes telles que whoami(signaler votre nom d'utilisateur) et hostname(évidemment, signaler le nom d'hôte). Par exemple:

PS1='
$(whoami)@$(hostname):$(pwd)
$ '

Pour des trucs plus amusants avec l'invite,, .bashrcet les extensions de paramètres, consultez mes réponses ici:

Comment vérifier l'état de la batterie à l'aide du terminal?

Comment puis-je faire en sorte que mes terminaux / coques aient des designs personnalisés? et

Comment afficher une horloge en cours d'exécution dans le terminal avant l'invite de commande?

Sergiy Kolodyazhnyy
la source
Pourquoi le nom d'utilisateur et le nom de la machine sont codés en dur? Ce serait bien s'ils étaient paramétrés
rpax
@rpax mon nom d'utilisateur réel est différent. C'est mon nom que vous voyez dans l'invite. Le nom de la machine est également différent.
Sergiy Kolodyazhnyy
Je voulais dire une sorte de $(whoami)au lieu deusernamehardcoded
rpax
@rpax oh, cela peut aussi être fait. Je vais inclure cela dans ma réponse
Sergiy Kolodyazhnyy
4
Notez que vous pouvez utiliser respectivement \uet \hpour votre nom d' utilisateur et votre nom d'hôte. Vous pouvez voir plus de caractères spéciaux (par exemple l'heure actuelle dans différents formats) ici
Yossarian