Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Démarrer un shell avec un programme dedans.

Posté par Dan () le 20 décembre 2007
0
Depuis que j'ai écrit mon journal Vim VS Gvim, ce problème m'énerve de plus en plus.
Sous Vim, comme sous plein d'applications, CTRL-Z stoppe le processus pour revenir dans le shell. Ensuite, on se sert de bg ou fg pour mettre en avant ou en arrière plan.
J'aimerais reproduire ce comportement dans un terminal qui s'ouvre directement avec VIM.
Voici ce que j'ai essayé :

xterm -e vimLance un xterm avec uniquement vim dedans, CTRL-Z ne renvoit donc sur rien.
xterm -e sh -c "bash && vim"Ouvre un xterm dans lequel tourne bash puis, une fois qu'on a quitté bash, lance vim. Mais j'aimerais que le vim tourne à l'intérieur du bash, comme si je l'avais tapé par moi-même. Alors j'ai pensé à mettre un & plutôt qu'un && :
xterm -e sh -c "bash & vim" Mais le bash est complètement zappé.
xterm -e sh -c "vim & bash"Mais : Vim alerte ! Il me dit qu'il n'est pas lancé dans un terminal.
Je me retrouve avec bash et vim en même temps dans le terminal.

Il faudrait que le vim lancé ait pour père le bash du xterm...

Le but final est de lancer un vim dans lequel CTRL-Z me renvoit dans un shell, comme si j'avais tapé vim dans un shell normal.
Sinon, pour les alternatives :
:sh ouvre un shell, mais c'est autrement plus lent que CTRL-Z
screen ne fait pas exactement ce que je veux.

Merci d'avance :=)

> Lire le message (15 commentaires, moyenne: 1).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

pourquoi faire ?

Posté par B. franck () le 21/12/2007 à 00:22. (lien). Évalué à 1.

déjà c'est pour quoi faire exactement ?
il y a peut-être une alternative.

Sinon, je n'ai pas vu l'essai:

bash xterm -e vim &

qui lance un bash père d'une xterm qui lance vim, le tout en bg...

  • [^]Re: pourquoi faire ?

    Posté par Dan () le 21/12/2007 à 12:11. (lien). Évalué à 1.

    Tout le problème est là :
    bash xterm n'existe pas, il faut l'option -c entre les deux
    J'ai l'impression que bash -c xterm est équivalent à xterm tapé dans bash.

    ---

    C'est pour lancer dans un xterm (en fait ce sera après plutôt un urxvt mais ça change rien) un vim.
    Tape :
    xterm -e vim
    puis CTRL-Z

    et tu comprendras le problème.

chez moi, ca marche pareil

Posté par NeoX () le 21/12/2007 à 00:39. (lien). Évalué à 1.

que chez toi,

mais j'ai pas saisi l'interet du Ctrl+Z qui me renvoie sur le shell en suspendant le vim

par rapport au :sh qui lance un shell dans le vim

et surtout quel est l'interet de lancer un vim directement si c'est pour l'arret pour avoir un shell, autant lancer le shell d'abord, non ?

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
  • [^]Re: chez moi, ca marche pareil

    Posté par Dan () le 21/12/2007 à 11:43. (lien). Évalué à 1.

    En fait, un Ctrl-Z est instantanné, mais un :sh prend chez moi 2 à 3 secondes.

des essais

Posté par NeoX () le 21/12/2007 à 00:43. (lien). Évalué à 1.

sont presques bons

mais il doit falloir lancer un vim DANS un bash DANS un xterm

donc en theorie et sans avoir essayer
xterm -e bash -c vim

man xterm
et
man bash

pour savoir comment lancer une commande à l'appel du programme.

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
  • [^]Re: des essais

    Posté par Dan () le 21/12/2007 à 11:59. (lien). Évalué à 1.

    Ça marche pas.
    Si je fais CTRL-Z, le titre change en bash, mais aucun shell n'est accessible.
    J'ai bien maté les man pages (bon, tu comprendras que j'ai pas tout lu le man bash, j'ai juste regardé les options).
    Mais le problème c'est justement comme dans ton exemple.

    Quand on lance une commande dans un bash, la commande se lance mais le bash ne reste pas en arrière plan comme si on l'avait tapé.

    En fait, le problème est moins trivial qu'il n'en a l'air, sauf bien sûr si j'ai sauté l'option qui va bien.

    • [^]Re: des essais

      Posté par NeoX () le 21/12/2007 à 12:23. (lien). Évalué à 1.

      la question est peut-etre de savoir ce que tu veux faire "au final"
      pour ensuite savoir "comment le faire"


      parce que là j'ai l'impression que tu cherches à couper les cheveux en 4...

      --
      Apprendre par les autres, c'est bien.
      Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
      • [^]Re: des essais

        Posté par Dan () le 21/12/2007 à 13:14. (lien). Évalué à 1.

        Au final j'ai envie de faire :

        xterm -e vim

        et que dans ce xterm, CTRL-Z me renvoie vers un shell.

        • [^]Re: des essais

          Posté par Gérald (page perso, ) le 21/12/2007 à 14:08. (lien). Évalué à 1.

          Ce qui est idiot, tout l'interet de xterm -e <command> résidant dans le fait de ne pas lancer un shell supplémentaire pour faire tourner <command>...

          • [^]Re: des essais

            Posté par Etienne () le 21/12/2007 à 14:21. (lien). Évalué à 1.

            Ce qui est idiot
            Ca n'a rien d'idiot, ca peut permettre d'avoir un éditeur lancé en arrière plan dans une session X. Ce qui peut remplacer un gvim tout en gardant le comportement d'un vim, par exemple le fait que ^Z de redonne la mains sur le process père ce qui permet d'avoir un vrai shell.

            Etienne

    • [^]Re: des essais

      Posté par Etienne () le 21/12/2007 à 14:19. (lien). Évalué à 1.

      Si je fais CTRL-Z, le titre change en bash, mais aucun shell n'est accessible.

      C'est parcequ'en faisant un bash -c, le shell invoqué n'est pas un shell interactif et il n'y aura donc pas possibilité de saisire une commande.

      Je ne vois pas trop de solution tout de suite car pour que le ^Z donne un shell interactif, il faut qu'il ai été lancé à partir d'un shell interactif. ^Z suspend vim et te redonne la main sur le process parent, dans notre cas, le process parent n'est pas un shell interactif.


      Etienne

      • [^]Re: des essais

        Posté par Etienne () le 21/12/2007 à 14:34. (lien). Évalué à 1.

        Je peux te proposer un truc pas forcément très propre mais qui marche.


        PROMPT_COMMAND="vim; unset PROMPT_COMMAND" xterm -e bash --norc


        Le contenu de la variable PROMPT_COMMAND est executé avant chaque prompt, donc arrivé là tu as déjà un shell interactif. En demandant d'executer vim (puis en supprimant la variable pour éviter de lancer des vim en boucle), tu lance vim dès le début.

        Le --norc est là car cette variable PROMPT_COMMAND est utilisée redéclarée dans le /etc/bashrc de la distrib que j'utilise.

        Tu peux aussi passer par une autre variable et dans ton ~/.bashrc faire en sorte de positionner PROMPT_COMMAND comme il faut pour éviter le --norc.


        Etienne

        • [^]Re: des essais

          Posté par Dan () le 21/12/2007 à 15:04. (lien). Évalué à 1.

          Génial !!!
          J'allais dire j'ai trouvé une solution pourrie mais qui marche, mais la tienne reste mieux.

          Je vais quand même l'écrire, on sait jamais ça pourrait aider quelqu'un.
          ------------------------------------
          urxvt -name Ma_Session_Vim & sleep 5 && FvwmCommand "All (Ma_Session_Vim) Focus" && xvkbd -xsendevent -text "vim\r"

          1) J'ouvre un terminal
          2) J'attends : récupérer le PID et l'attendre serait plus propre qu'un sleep 5
          3) Une commande interne à mon gestionnaire de fenêtre qui met le focus sur la fenêtre
          4) Un clavier virtuel écrit vim puis "entrer" dans le terminal.

          C'est simplement horrible en plus de pas être standard.
          ------------------------------------

          Sinon je trouve ta solution au contraire très propre (surtout par rapport à la mienne), mon bashrc ne permet pas non plus ta commande si on ne met pas le --norc.
          J'essaierai de poster la partie de bashrc qu'll faut dès que possible.

          • [^]Re: des essais

            Posté par Etienne () le 21/12/2007 à 15:29. (lien). Évalué à 1.

            Sinon je trouve ta solution au contraire très propre (surtout par rapport à la mienne), mon bashrc ne permet pas non plus ta commande si on ne met pas le --norc.
            J'essaierai de poster la partie de bashrc qu'll faut dès que possible.


            Dans le .bashrc il suffit de mettre simplement à la fin


            if [ "$BASH_START_COMMAND" ]
            then
            PROMPT_COMMAND="$BASH_START_COMMAND;unset PROMPT_COMMAND"
            fi


            Et démarrer xterm avec la variable BASH_START_COMMAND contenant la commande à executer. Dans ton cas

            BASH_START_COMMAND=vim xterm

            • [^]Re: des essais

              Posté par Dan () le 21/12/2007 à 16:07. (lien). Évalué à 1.

              Merci beaucoup :)

              J'ai mis ta condition en fin de ~/.bashrc
              Et je lance ceci :

              BASH_START_COMMAND='vim --servername Danou' urxvt -fn "xft:Bitstream Vera Sans Mono:pixelsize=20" -bg black -fg white +sb -name vim

              Ça marche parfaitement et quand je reviens dans le shell, le titre reste vim, ce qui est parfait pour éviter d'oublier que c'est vim et pas un shell normal.

              Encore merci.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell