web-dev-qa-db-fra.com

Piping Terminal command to Gedit pour une édition ultérieure

J'ai une commande complexe dans ma fenêtre de terminal que je voudrais éditer davantage e. g.

echo "This is a complex command I want to edit in an editor"

Comment puis-je diriger 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 sens de cette solution, juste pour un éditeur basé sur une interface graphique: http://www.commandlinefu.com/commands/view/1446/rapidly-invoke-an-editor-to- écrire un long-complexe-ou-tricky-commande

Veuillez noter que je recherche spécifiquement un moyen de modifier un éditeur externe.

6
somethis

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

Ce que vous pouvez faire est de définir FCEDIT=/usr/bin/gedit. Maintenant, il y a le truc: vous exécutez une longue commande, vous décidez que vous souhaitez la modifier, alors immédiatement après l'appel, appelez fc. Cela fera apparaître la fenêtre gedit avec votre commande, prête à être modifiée. Une fois que vous avez terminé, enregistrez et quittez comme d'habitude.

Le désavantage ? Il laissera une traînée de messages GTK inutiles dans le terminal. Personnellement, j'utilise vim ou nano éditeurs de ligne de commande plutôt que gedit - ceux-ci ne laissent aucune trace. En outre, ils peuvent être utilisés dans TTY et pas seulement dans un environnement graphique. Je vous suggère fortement 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 de même avec la ligne de commande 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 # binds CTRL+X+E
bindkey "^X^E" edit-command-line # binds CTRL+X - CTRL+E
12
Sergiy Kolodyazhnyy

Utilisez gedit -. De cette façon, il lira depuis stdin, vous pourrez donc utiliser

echo 'echo "complex command"'|gedit -

ou simplement

gedit - <<< 'echo "complex command"'

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

8
karoshi

Avec cette commande, vous pouvez obtenir ceci: echo "This is a complex command" > tempfile | gedit tempfile.

Edit:

Si je comprends bien, vous voulez quelque chose comme ceci: echo echo "This is a complex command" > 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éconseillerais de modifier les commandes sur Gedit. Le terminal Linux est extrêmement puissant (nous avons un onglet complet).

3
Tshilidzi Mudau