Plutôt que de reformuler ma question, permettez-moi de vous décrire le cas d'utilisation souhaité:
Je crée un court shell-script pour exécuter la commande "gnome-terminal --someoptionflagname 'mon texte à publier'", et exécute ce script.
Gnome-terminal apparaît, avec une invite de ligne de commande suivie de mon texte.
c'est à dire: fields@mycomputer:/$ my text to be posted
Cela peut-il être fait?
xnee
maintenant.Réponses:
Vous pouvez le faire avec expect ( install ). Créez et rendez exécutable
~/bin/myprompt
:et exécutez Gnome Terminal avec:
la source
Si je comprends bien, vous voulez que votre première ligne d'entrée soit pré-remplie au contenu que vous passez sur la ligne de commande gnome-terminal.
Je ne sais pas comment faire exactement cela avec bash, mais voici quelque chose qui se rapproche. Dans votre
~/.bashrc
, ajoutez la ligne suivante à la fin:Exécutez
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
et appuyez sur Upà l'invite pour rappeler le texte.Notez également que si vous mettez des
set -o history
commentaires suivis à la fin de votre.bashrc
, ils seront entrés dans l'historique au début de bash, vous pouvez donc les utiliser comme base pour les éditer en les atteignant avec la Upclé et en supprimant l'initiale#
.la source
La suggestion d'ændrük est très bonne et a fonctionné pour moi, mais la commande est codée en dur dans le script, et si vous redimensionnez la fenêtre du terminal, cela ne fonctionne pas bien. En utilisant son code comme base, j'ai ajouté la possibilité d'envoyer au script myprompt la commande comme argument, et ce script gère correctement le redimensionnement de la fenêtre du terminal.
et exécutez Gnome Terminal avec:
la source
La réponse d'ændrük est bonne, mais peut-être un peu lourde pour la tâche.
Voici un script qui écrit un script basé sur ses arguments
Si vous n'avez pas fait beaucoup de programmation shell, il semble y avoir plus de magie ici qu'il n'y en a. Tout d'abord, je nomme un fichier temporaire pour contenir le script où
$$
est l'ID de processus du shell exécutant ce script. La/tmp/something.$$
métaphore est utilisée dans le cas où deux instances de ce script sont exécutées en même temps, elles n'essaieront pas d'utiliser le même fichier temporaire.La variable
$SHELL
est définie sur le nom du shell exécutant le script. Si vous utilisez / usr / bin / bash, vous aimeriez probablement que le mini-script l'utilise également.C'est
"$@"
un idiome shell pour "interpoler tous mes arguments, en les citant si nécessaire". Cette syntaxe particulière provoquepour interpoler les arguments en deux éléments
au lieu des quatre qui
$@
donneraientLes dernières lignes du script permettent à un gnome-terminal de démarrer le mini-script, puis de démarrer un shell interactif. Lorsque le gnome-terminal se ferme, le script temporaire est supprimé car le détritus n'est pas cool.
La dernière ligne ne fait pas partie du mini-script, elle démontre que le mini-script fonctionne. Si le script de 11 lignes ci-dessus se trouve dans un fichier appelé,
rt.sh
lechmod
rend exécutable et ensuite il est exécuté.Le résultat de tout cela sera un terminal gnome qui démarre, affiche
sur sa première ligne puis démarre un shell interactif:
la source
gnome-terminal -x sh -c "echo hello world; bash"
, ce que je ne pense pas que la question demande.Les deux réponses que j'ai préféré résoudre sont celles utilisées
expect
et celle-ci où elles recommandent d'utiliser le--init-file
drapeau soit dans le shebang soit lors de l'exécution du terminal:... et exécutez-le comme:
expect
est probablement la meilleure solution (pour des raisons que je vais décrire), sauf que je ne peux pas contrôler si elle est installée dans mon environnement cible.Le problème que j'ai rencontré avec les bash
--init-file
etgnome-terminal
les--command
comme un hack pour résoudre ce problème est que le shell n'a pas accès à STDIN lors de l'exécution des scripts d'initialisation. Si, par exemple, je veux exécuter quelque chose qui nécessiterait une entrée utilisateur (ftp, telnet, etc.) mais laisser le shell parent fonctionner après cela ne fonctionnera pas; la seule exception que j'ai vue jusqu'à présent est ssh:... mais ce dont j'ai besoin est plus compliqué que cet exemple de jouet. Quoi qu'il en soit, j'espère que le
--init-file
contenu sera utile à tous ceux qui liront cette question.la source
Vous pouvez utiliser les arguments
-e
ou-x
pour exécuter une commande dans un terminal nouvellement surgi, mais ce n'est pas exactement ce que vous voulez.la source