web-dev-qa-db-fra.com

Utiliser des alias dans la boîte de dialogue Alt-F2

Dans le fichier .bashrc, on peut ajouter un alias pour une commande, disons

alias geditm = 'gedit --display=D1'

Maintenant, je peux exécuter geditm dans un terminal et ouvrir gedit dans l'écran D1. Je suis curieux de savoir s’il existe un moyen de définir un alias pour exécuter des commandes à partir du menu Alt-F2, afin de pouvoir Alt+F2, tapez geditm et obtenez le même résultat.

Je suis intéressé à faire cela en général, pas seulement pour gedit.

6
Jonathan Gallagher

Non, pas vraiment. Je ne suis pas sûr des détails mais j'imagine que le Alt+F2 transmet simplement les commandes que vous exécutez à un shell non interactif et non connecté. Ce type de shell n'aura pas accès aux alias, comme expliqué dans man bash :

_   When bash is started non-interactively, to  run  a  Shell  script,  for
   example, it looks for the variable BASH_ENV in the environment, expands
   its value if it appears there, and uses the expanded value as the  name
   of  a  file to read and execute.  Bash behaves as if the following com‐
   mand were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for  the  file
   name.
_

Ainsi, vous pourriez penser que vous pouvez simplement définir _BASH_ENV_ pour qu'il pointe vers un fichier contenant des définitions d'alias. Malheureusement, les alias ne sont pas disponibles pour les shells non interactifs. Encore de man bash :

_   Aliases are not expanded when the Shell is not interactive, unless  the
   expand_aliases  Shell option is set using shopt (see the description of
   shopt under Shell BUILTIN COMMANDS below).
_

Vous pourriez penser que vous pourriez ajouter _shopt -s expand_aliases_ au fichier défini par _$BASH_ENV_ mais cela ne fonctionnera pas car ce fichier sera lu mais dans un autre shell.

Je sais que c'est déroutant. En bout de ligne, vous ne pouvez pas mettre des alias à la disposition des utilisateurs. Alt+F2 dialogue.


Une solution de contournement

Donc, comme vous ne pouvez pas faire cela avec des alias, vous pouvez le faire avec des scripts:

_Sudo -H gedit /usr/bin/geditm
_

Cela fera apparaître une nouvelle fenêtre gedit, y ajoutera ces lignes et enregistrera le fichier:

_#!/bin/bash
gedit --display=D1
_

Rendre le script exécutable:

_Sudo chmod a+x /usr/bin/geditm
_

Maintenant, vous pouvez frapper Alt+F2, écrivez geditm et le script qui sera lancé lancera à son tour gedit avec les options souhaitées.

8
terdon

Remarque: après avoir relu votre question et y avoir réfléchi plus longtemps, je pense que la réponse de terdon est probablement celle que vous voulez, pas celle-ci; celui-ci est trop général et nécessite plus de dactylographie.

Si je comprends bien, vous voudrez peut-être ajouter --display=D1 à tout programme exécuté à partir de Alt-F2; est-ce correct? Après une discussion, probablement pas, alors assurez-vous de voir "EDIT2" avec cela pour une prise différente.

Si tel est le cas, il semble que vous puissiez créer un script simple qui réside dans un dossier de votre chemin, comme ~/bin, qui dirait simplement:

#!/bin/bash
$1 --display=D1

Si vous nommez le script "display", à partir de Alt-F2, vous pourrez exécuter display gedit et ajouter "--display = D1".

EDIT: Je suppose que vous devrez le rendre exécutable, en utilisant chmod +x display

Je ne peux pas vraiment tester cela facilement, mais ça devrait marcher (en supposant que c'est ce que vous voulez faire.

EDIT2: Il semble que je n'ai pas bien compris votre question, mais je pense que vous pouvez toujours utiliser une méthode similaire. Au lieu de spécifier l'indicateur, vous pouvez utiliser des substitutions pour la commande et les indicateurs. Je suppose que vous pourriez simplement dire

$*

au lieu de

$1 --display=D1

Alors la commande Alt-F2 serait "display xxxx yyyy ..."

1
Marty Fried