7 votes

Transmettre une commande Terminal à Gedit pour une édition ultérieure

J'ai une commande complexe dans ma fenêtre de terminal que je voudrais éditer davantage, par exemple :

echo "C'est une commande complexe que je veux éditer dans un éditeur"

Comment puis-je rediriger cette ligne de code - pas la sortie mais le code réel - vers par exemple Gedit pour une édition ultérieure? Quelque chose dans le genre de cette solution, mais pour un éditeur basé sur une interface graphique : http://www.commandlinefu.com/commands/view/1446/rapidly-invoke-an-editor-to-write-a-long-complex-or-tricky-command

Veuillez noter que je cherche spécifiquement un moyen d'éditer dans un éditeur externe.

15voto

Sergiy Kolodyazhnyy Points 97292

bash, zsh, et ksh (y compris ses dérivés) ont cette commande intégrée très pratique fc, qui ouvre un éditeur pour modifier votre commande précédente. Si la variable FCEDIT n'est pas définie, par défaut elle appellera l'éditeur défini dans EDITOR; si la variable EDITOR n'est pas définie, par défaut elle appellera nano.

Ce que vous pouvez faire, c'est définir FCEDIT=/usr/bin/gedit. Maintenant voici le truc : vous exécutez une longue commande, vous décidez de la changer, alors immédiatement après l'avoir exécutée, appelez fc. Cela ouvrira une fenêtre gedit avec votre commande prête à être modifiée. Une fois que vous avez terminé de modifier, enregistrez et quittez comme vous le feriez normalement.

L'inconvénient ? Cela laissera une trace de messages GTK inutiles dans le terminal. Personnellement, j'utilise les éditeurs de ligne de commande vim ou nano plutôt que gedit - ils ne laissent aucune trace, en plus, ils peuvent être utilisés dans un environnement de ligne de commande, pas seulement en GUI. Je vous recommande vivement de passer à nano car c'est l'un des éditeurs de texte en ligne de commande les plus simples.

Note supplémentaire dans bash, vous pouvez faire la même chose avec la commande de ligne que vous êtes en train d'éditer avec ctrl+X+E ou ctrl+X - ctrl+E; vous pouvez avoir le même comportement dans zsh en ajoutant à votre .zshrc

autoload -z edit-command-line
zle -N edit-command-line
bindkey '^XE' edit-command-line # lie CTRL+X+E
bindkey "^X^E" edit-command-line # lie CTRL+X - CTRL+E

11voto

karoshi Points 371

Utilisez gedit -. De cette façon, il lira à partir de stdin, donc vous pouvez utiliser

echo 'echo "commande complexe"'|gedit -

ou simplement

gedit - <<< 'echo "commande complexe"'

De cette façon, vous n'aurez pas besoin de créer un fichier temporaire séparé.

3voto

Tshilidzi Mudau Points 4095

Avec cette commande, vous pouvez réaliser cela : echo "Ceci est une commande complexe" > tempfile | gedit tempfile.

Modifier :

D'après ce que je comprends, vous voulez quelque chose comme ceci : echo echo "Ceci est une commande complexe" > tempfile | gedit tempfile. Par exemple, echo ls -d > tempfile | gedit tempfile ouvrira un fichier gedit avec le texte suivant : "ls -d".

Cela dit, je déconseille de modifier les commandes sur Gedit. Le terminal Linux est extrêmement puissant (nous avons une auto-complétion puissante).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X