2011-10-04 4 views
3

Je passe beaucoup de temps à ouvrir des terminaux et à taper des commandes.Comment démarrer une commande dans un terminal comme si j'avais ouvert le terminal et tapé la commande

$ gnome-terminal 
(change mouse focus to new terminal) 
$ reset && clear && tail -F ~/file_that_grows 

tous si souvent, je me retrouve à cette fenêtre et tuer le processus avec contrôle-C, puis le redémarrer. En fait, je vais généralement alias la réinitialisation & & .... peu à quelque chose de plus typable, comme rctf.

Comment puis-je automatiser le premier bit du processus? Le meilleur que je peux faire jusqu'à maintenant est

gnome-terminal --title rctf -e 'tail -F ~/.bashrc' 

Mais il y a différents problèmes avec ceci. Premièrement, le ~ n'est pas développé, donc le fichier n'est pas trouvé. Deuxièmement, lorsque la commande est terminée, le terminal se termine.

Y at-il un moyen de démarrer automatiquement un terminal exactement comme si je l'avais ouvert et ensuite tapé quelque chose? (Points supplémentaires si vous pouvez obtenir la commande dans l'historique afin qu'elle puisse être redémarrée avec la flèche vers le haut).

Répondre

3

Si vous ne me dérange pas le stockage de votre commande dans un fichier, vous pouvez abuser l'option --rcfile dans bash. Par exemple, en utilisant le script suivant pour enregistrer votre commande (s):

[[email protected]]$ cat $HOME/.term-rcfile 
. ~/.bashrc   # chain in the standard rc file 
tail -F ~/.bashrc # command to run 

Vous pouvez alors faire:

xterm -e "bash --rcfile $HOME/.term-rcfile -i" 

devrait également fonctionner pour gnome-terminal:

gnome-terminal -e "bash --rcfile $HOME/.term-rcfile -i" 

"(Points supplémentaires si vous pouvez obtenir la commande dans l'historique afin qu'elle puisse être redémarrée avec flèche vers le haut)."

Je ne vois pas comment faire automatiquement, mais si votre course:

history -r ~/.term-rcfile 

une fois que vous êtes dans le nouveau terminal (ou chaque fois que vous voulez/besoin), les entrées de la fichier sera ajouté à votre historique (sans les exécuter) et vous aurez alors accès à eux comme vous le feriez des entrées d'historique normales

1

Utilisez la variable $ HOME au lieu du tilde.

gnome-terminal --title rctf -e "tail -F $HOME/.bashrc" 
+0

Il y a longtemps, mais toujours intéressant, je veux ouvrir gnome-terminal après l'insertion d'un périphérique USB spécial J'ai exporté l'affichage dans mon sh-file qui est invoqué par la règle udev et dans lequel je lance gnome-terminal. seul script, en imprimant quelques infos sur le nouveau terminal et en attendant la saisie de l'utilisateur par read. Interactive.Il fonctionne quand je génère gnome-terminal sans arguments, en passant le titre ne fait rien, x et e juste fermer la fenêtre immédiatement. Qu'est-ce qui pourrait être un bon moyen? – icbytes

3

Pour les programmes interactifs, j'utilise:

xterm -e 'sh -c "vi $HOME/foo.txt; sh"' 

Le sh -c signifie que les variables dans ma chaîne de commande sont substituées et sh à la fin signifie qu'un obus a commencé après avoir fini avec vi au lieu de fermer la fenêtre du terminal.

Pour un programme non interactif comme tail qui ne peut être arrêté en appuyant sur CTRL-C d'envoyer SIGINT au processus, j'utilise le shell trap intégré pour être sûr qu'une coquille est exécutée si l'utilisateur presses CTRL-C au lieu de fermer la fenêtre du terminal:

xterm -e sh -c 'trap sh SIGINT; tail -f $HOME/foo.txt' 
+0

Cela fait ce que je veux pour vi, mais avec la queue, le Ctrl-C pour tuer le programme tue aussi le xterm. (en utilisant xterm -e 'sh -c "tail -F ~/.bashrc; sh"') –

Questions connexes