1 votes

Insérer la sortie de Shell Shell dans un éditeur de texte ?

Mon objectif est d'utiliser la sortie d'un script bash script pour insérer la chaîne résultante dans un fichier texte à l'aide d'une touche de raccourci définie par le système.

Le script (voir ci-dessous) fonctionne parfaitement dans le terminal. Mais lorsque je le déclenche à partir de ma touche de raccourci (j'utilise : super + alt + u au cas où cela aurait de l'importance), je n'obtiens rien du script. L'éditeur (par exemple, gedit) semble "clignoter", mais rien ne se passe. Je suppose que le script fonctionne, mais que je ne "termine" pas le script correctement pour cette utilisation( ?).

C'est le script : il prend un timestamp unix (sortie de date +%s ), la convertit en base62, puis renvoie les quatre derniers caractères de la chaîne résultante. (Pour les curieux, je l'utilise pour générer des ancres raisonnables pour les notes de bas de page dans un texte "Markdown").

#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352/232251

function u2b {
  v=$(date +%s)
  BASE62=($(echo {0..9} {a..z} {A..Z}))
  for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
  done 
}
r=$(u2b)
echo ${r: -4}

J'ai essayé la dernière ligne avec printf ${r: -4} mais cela ne sert à rien.

Comment puis-je persuader cette combinaison script/clé de fournir une "entrée" à mon éditeur ? (J'utilise la dernière version vanille d'Ubuntu).

1voto

karel Points 97032

Modifiez le script original de bash comme suit :

#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352/232251

function u2b {
  v=$(date +%s)
  BASE62=($(echo {0..9} {a..z} {A..Z}))
  for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
  done 
}
r=$(u2b)
result=$(echo ${r: -4})
echo $result # for testing only, this line can be optionally deleted afterwards
gedit - <<< $result # redirect output into gedit 

L'avant-dernière ligne qui dit echo $result n'est utilisé que pour tester le script. Il peut éventuellement être supprimé.

0voto

Dɑvïd Points 1534

J'ai trouvé de l'aide auprès de Unix.SE et en l'incorporant dans le script avec un peu de retard (j'ai peut-être besoin d'une routine plus rapide !), j'obtiens juste le résultat nécessaire pour introduire le résultat de ce script dans la fenêtre active :

#!/bin/bash
# takes unix timestamp and converts to base62
# HT: https://stackoverflow.com/a/14472352 | https://unix.stackexchange.com/a/393164

function u2b {
  v=$(date +%s)
  BASE62=($(echo {0..9} {a..z} {A..Z}))
  for i in $(bc <<< "obase=62; $v"); do echo -n ${BASE62[$(( 10#$i ))]}
  done 
}
r=$(u2b)
o=$(echo ${r: -4})

windowid=$(xdotool getwindowfocus)
sleep 0.5 && xdotool windowactivate --sync $windowid type "$o"

Les changements par rapport au message original se trouvent tous dans les trois dernières lignes, comme suit :

  • capture la chaîne de caractères souhaitée dans une variable ;
  • saisit l'ID de la fenêtre actuelle ;
  • laisser script s'exécuter et "taper" la chaîne de sortie dans la fenêtre courante.

J'apprécie particulièrement le fait qu'il n'est pas nécessaire d'utiliser un fichier intermédiaire, ni d'utiliser le presse-papiers de quelque manière que ce soit.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X