web-dev-qa-db-fra.com

Fichier de bureau pour ouvrir le terminal avec une autre invite

Je veux créer un fichier . Desktop, qui ouvre un terminal avec une invite, qui affiche l'heure actuelle et le répertoire de travail actuel en couleur verte. J'ai réalisé cela via la commande:

$ PS1="\033[0;32m(\$(date +%H:%M:%S)) \W$ \033[0m"

donne cette invite:

(14:30:12) media$ 

Pour cette commande, j'ai créé le fichier . Desktop suivant:

[Desktop Entry]
Version=1.0
Name=Open Terminal
Comment=Open Terminal with modified Prompt
Exec=bash -c 'export PS1="\033[0;32m(\$(date +%H:%M:%S)) \W$ \033[0m";$Shell'
Icon=utilities-terminal
Terminal=true
Type=Application
Categories=Application;

Je pense que je fais quelque chose de mal en passant la variable, mais je ne sais pas quoi exactement, pouvez-vous m'aider à trouver quel est le problème?

La raison de cela gagne plusieurs .desktop fichiers avec lesquels je peux ouvrir différents terminaux avec différentes invites.

3
h0ch5tr4355

Cela fonctionne, mais peut être une solution moins adoptée.

Dépannage

D'après mon observation, il y a deux problèmes: $Shell est appelé après export PS1 commande et les invites de couleur bash ne sont pas correctement codées

  • Fonctionnement $Shell créera une nouvelle invite. Cela a causé quoi que ce soit fait avant, c'est-à-dire export PS1 devient inutile, car la nouvelle invite remplacera les précédentes.

  • Un autre problème est probablement quelques fautes de frappe. Je n'ai trouvé aucune raison de quitter le crochet carré unilatéral [ en cours d'ouverture.

Ce HOWTO a noté qu'il devrait être joint.

Comme mentionné précédemment, les séquences d'échappement non imprimables doivent être incluses entre \[\033[ et \]. Pour les séquences d'échappement de couleur, elles doivent également être suivies d'un minuscule m.

Solution de contournement

Utilisez un .bashrc fichier par différent PS1 configuration. Ensuite, exécutez bash qui appelle un autre bash avec --init-file option pour exécuter Prompt en utilisant le .bashrc fichier.

Suivez les étapes ci-dessous.

  1. Créez un fichier vide avec un nom différent, c'est-à-dire .bashrc2 dans Accueil répertoire.

  2. Ouvrez le fichier dans un éditeur de texte, copiez et collez ce qui suit (révisé).

    export PS1="\[\033[0;32m\](\$(date +%H:%M:%S)) \W$ \[\033[0m\]"     
    
  3. Enregistrez et fermez le fichier.

  4. Créez un autre fichier vide avec un nom différent, c'est-à-dire shortcut2.desktop sur le bureau .

  5. Ouvrez le fichier dans un éditeur de texte, copiez et collez ce qui suit.

    [Desktop Entry]
    Version=1.0
    Name=Terminal 2
    Comment=Open Terminal with .bashrc2
    Exec=bash -c 'bash --init-file $HOME/.bashrc2'
    Icon=utilities-terminal
    Terminal=true
    Type=Application
    Categories=Application;
    
  6. Enregistrez et fermez le fichier.

  7. Enfin, double-cliquez sur le raccourci (apparaît maintenant sous la forme Terminal 2 sur Bureau ) pour exécuter l'invite.

Répétez les étapes pour les autres configurations, le cas échéant, en donnant des noms différents, c'est-à-dire .bashrc3, shortcut3.desktop et autres choses de ce genre.

L'inexpliqué

Fonctionnement bash --init-file $HOME/.bashrc2 seul ne pourra pas inclure le PS1 configuration. L'invite résultante sera décolorée et retombera sur [\u@\h:\w]$ format. En d'autres termes, le .bashrc2 le fichier est entièrement ignoré. C'est pourquoi le Shell imbriqué est requis.

2
clearkimura