Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/10/2020, à 20:31

devEric69

[Bash] Script "svn log" à lancer contextuellement depuis Nautilus

Bonjour,

Je cherche à écrire un script très basique qui me permette de lancer une commande "svn log" sur un working directory SVN, avec un prompt qui me demande interactivement le mot de passe sudo, puis le fichier-texte à passer en commutateur à un grep de "svn log". En fait, je passerai le plus souvent un nom de fichier.
Le séquence simple que je tape pour faire ça dans le terminal est:
1°) je veux saisir le mot de passe sudo -i.
2°) faire la commande cd /home/user01/my_working_directory.
3°) lancer la commande svn log.
4°) faire un grep d'un texte dans le renvoi

Pour l'instant, ma version la plus aboutie, en utilisant le "pipe"lining de commandes et la variable de contexte $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS est:

#!/bin/bash

notify-send -t 10000 -i /usr/share/icons/gnome/32x32/status/info.png 'Prompt pour lancer une recherche svn log avec' 'une saisie utilisateur sur le texte saisi'

# Set IFS so that it won't consider spaces as entry separators.
IFS=$'\n'

# cd sur le rép. courant contextuel
cd $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
# "pipe"lining de commandes
gnome-terminal -x sudo -i read -p "Entrer le fichier à rechercher dans SVN: " input_file_to_search | svn log | grep $input_file_to_search | read -p "Appuyez une touche pour quitter" input_to_quit

J'ai le prompt du sudo, celui qui me demande quoi rechercher, puis le terminal se referme sad .
Quelqu'un a une idée du problème?


Modération : merci de respecter les règles du forum : les doublons sont interdits.

Dernière modification par devEric69 (Le 27/10/2020, à 21:12)

Hors ligne

#2 Le 27/10/2020, à 21:17

kamaris

Re : [Bash] Script "svn log" à lancer contextuellement depuis Nautilus

Le reste de la commande après le premier pipe ne s'exécute pas dans gnome-terminal, mais dans le script.
Il faut que tu mettes tout ça dans un mini-script :

gnome-terminal -x sh -c 'sudo -i read -p "Entrer le fichier à rechercher dans SVN: " input_file_to_search | svn log | grep "$input_file_to_search" | read -p "Appuyez une touche pour quitter" input_to_quit'

Hors ligne

#3 Le 28/10/2020, à 19:16

devEric69

Re : [Bash] Script "svn log" à lancer contextuellement depuis Nautilus

Merci.
Effectivement, il faut bien d'abord créer une seule et grande chaîne de commandes, à donner à interpréteur.
Ensuite, il y a une autre erreur ou amélioration pour le scripting - je ne sais pas - concernant SVN: je dois passer mon /home/user01/my_working_directory en paramètre à SVN. Avec cette modification, au final, j'obtiens quelque chose de plus simple comme: svn log  /home/user01/my_working_directory | grep "★".
Maintenant, je ne suis pas arrivé à faire fonctionner cette ligne avec du pur script. J'obtiens toujours (process:57475): GLib-GIO-CRITICAL **: 17:19:30.819: g_bus_watch_name: assertion 'g_dbus_is_name (name)' failed Failed to parse arguments: "com.canonical.Terminal.svn log /home/user01/my_working_directory | grep "★"" is not a valid application ID. Par contre, j'arrive à la compiler dans Lazarus et ça marche.

Je poste le code à tout hasard, si d'aventure, certains s'intéressent au langage "Pascal Object":

procedure TfrmMain.searchLogSVN(Sender: TObject);
var
  oProcess: TProcess;
  oSLoutput: TStringList;
  sCmd: string;
  i: integer;
{$IFDEF DEBUG}
sTemp: string;
{$ENDIF}
begin
  oProcess:= TProcess.Create(nil);
  oProcess.Options:= [poWaitOnExit, poUsePipes, poStdErrToOutput];
  sCmd:= 'sh -c "svn log /home/user01/my_working_directory';
	sCmd:= sCmd + ' | grep "' + edtParamForSvnLog.Text + '"';
  sCmd:= sCmd + '"';
  oProcess.Commandline:= sCmd;
  oProcess.Execute;
  oSLoutput:= TStringList.Create;
  oSLoutput.LoadFromStream(oProcess.Output);
{$IFDEF DEBUG}
for i:= 0 to Pred(oSLoutput.Count) do begin
  sTemp:= oSLoutput.Strings[i];
end;
{$ENDIF}
  memFound.Lines.Clear;
  memFound.Lines.AddStrings(oSLoutput);
  oSLoutput.Free;
  oProcess.CloseInput; oProcess.Free;
end;

Dernière modification par devEric69 (Le 28/10/2020, à 19:47)

Hors ligne

#4 Le 28/10/2020, à 19:25

kamaris

Re : [Bash] Script "svn log" à lancer contextuellement depuis Nautilus

Je ne sais pas quelle commande tu as lancée exactement et comment tu l'as lancée, mais tu dois avoir un problème de guillemets quelque part, ou d'une manière générale de délimiteurs pour séparer les mots.
Il faut que tu arrives à faire en sorte que la commande com.canonical.Terminal.svn soit comprise comme un mot séparé de ses arguments log et /home/user01/my_working_directory (et à fortiori séparé du pipe et de ce qui le suit).

Hors ligne