[gull] Truc et astuces: bash connector
felix
felix at f-hauri.ch
Thu Feb 15 21:27:22 CET 2018
On Thu, Feb 15, 2018 at 09:01:27PM +0100, felix wrote:
> > Surtout quel est le problème que cette méthode résoud, et quelle est l’idée
> > centrale de la méthode?
>
> Eliminer les ``forks'' répétitifs qui peuvent être évités.
> ...
> $ ps --sid $(ps ho sid $$) fw
> PID TTY STAT TIME COMMAND
> 4625 pts/2 Ss 0:00 -bash
> 9146 pts/2 S 0:00 \_ /usr/bin/bc -l
> 9150 pts/2 S 0:00 \_ /bin/date -f - +%s
> 9188 pts/2 R+ 0:00 \_ ps --sid 4625 fw
J'allais oublier:
Tant qu'à faire de systématiser les dialogues avec des sous-tâches,
la suite serait le *connecteur de DB*, avec la possibilité de se
connecter à une base mysql, postgresql ou sqlite pour manipuler
des tables (temporaires ou non) en plusieurs étapes (voire l'exemple
qui utilise sqlite3: `# apt install sqlite3`).
$ bash shell_connector.sh
Ce script génère 4 sorties:
Un `df -k` avec la colone `%` recalculée, plus le calcul d'une ligne `Total`.
/dev devtmpfs 0.00K 7.81G 0% 0.00%
/run tmpfs 57.47M 1.56G 4% 3.59%
/ ext4 49.25G 74.23G 67% 66.35%
...
Total 49.34G 104.11G
un `ls -ltr` via `ls -l` et sqlite pour le tri par date, ainsi qu'un
calcul de la taille en ``lisible par humain'' avec 2 décimales, la
ligne `Total` contient une somme calculée par `bc` et une autre par `SQL`.
perms user date size name
-rw-r--r-- felix 2018-02-14 17:59 7.93Kb shell_connector.sh
-rw-r--r-- felix 2018-02-15 20:17 12.14Kb scTestFile.raw.gz
by bc: 20.07Kb, by sql: 20.07Kb Total
La date courrante à une seconde près,
Last SQL read : jeu 15 fév 21:09:20
now by date : jeu 15 fév 21:09:20
now by bash : jeu 15 fév 21:09:20
Et enfin le résultat de la commande `ps --sid $(ps ho sid $$) fw`:
PID TTY STAT TIME COMMAND
6381 pts/1 Ss 0:00 -bash
6392 pts/1 S+ 0:00 \_ bash shell_connector.sh
6396 pts/1 S+ 0:00 \_ /usr/bin/bc -l
6401 pts/1 S+ 0:00 \_ /bin/date -f - +%s
6406 pts/1 S+ 0:00 \_ /usr/bin/sqlite3 -separator ? -header /dev/shm/test.sqlite
6414 pts/1 R+ 0:00 \_ ps --sid 6381 fw
Voire le script, repérer les lignes contenant `mySqlite` on `SQLIN`:
En gros:
newSqlConnector $SQLITE "-separator $'\t' -header /dev/shm/test.sqlite"
cat >&$SQLIN <<-EOSQLInit
DROP TABLE IF EXISTS files;
CREATE TABLE files (perms, user, date UNSIGNED BIGINT,
size UNSIGNED BIGINT,name);
EOSQLInit
...
while read perm blk user group size month day yot name;do
...
echo >&$SQLIN "INSERT INTO files values('$perm','$user',$Date,$size,'$name');"
done < <(LANG=C /bin/ls -l|tail -n+2)
mySqlite myarray "SELECT * from files order by date;"
for line in "${myarray[@]}";do
IFS=$'\t' read perm user date size name <<<"$line"
...
done
mySqlite stot 'SELECT SUM(size) FROM files;'
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list