Dash est un super environnement d'exécution pour le sous-ensemble POSIX de Bash. Il est portable, hyper rapide, consomme moins de 1 Mo de RAM. Bref un très bon outil.
Par contre, la syntaxe de Bash / Dash est error-prone au possible. D'autant qu'en dehors des outils classiques d'unix (grep, sed, awk, wget/curl) il y a peu de lib qui soient utilisables.
Bref, pour faire de petites choses comme lancer sa JRE ou filtrer des fichiers why not, mais en dehors de ça, ça me fait toujours hésiter.
Et ce matin je découvre que Kotlin peut être utilisé en tant que langage de scripts. Il suffit d'avoir installé dans notre PATH l'utilitaire kscript
disponible ici et nous pouvons commencer à écrire ce genre de choses :
#!/usr/bin/env kscript
println("Hello, World!")
Ensuite un petits chmod u+x
sur notre fichier qui pourra se lancer en tapant :
./mon-script.kts
Et c'est super bien ça !
Aujourd'hui j'ai testé deux Linux Mint : Tricia (19.3) qui est basée sur Ubuntu et LMDE (4) qui est basée sur Debian. Et je ne comprends pas comment marche les variables d'environnement sous LMDE ! Je m'explique, sous une Tricia je peux ajouter des exports dans mon fichier ~/.profile
, typiquement :
# Ajouts en fin de fichier
export JAVA_HOME="..."
...
export PATH="${PATH}:${JAVA_HOME}/bin"
Et que je sois dans un script shell ou dans une console, ces variables sont bien définies avec la bonne valeur. Mieux encore, la modification de $PATH
me permettra d'utiliser les commandes/scripts de démarrage des programmes lorsque j'exécuterai un ALT + F2
; en somme tout marche au poil.
Par contre sous LMDE pas moyen !!
(ノಠ益ಠ)ノ彡┻━┻
Tout ce qui est déclaré dans le ~/.profile
est ignoré par Bash et pourtant je n'ai aucun fichier du type ~/.bash_profile
ou ~/.bash_login
(ndr. pour ceux qui ne le saurait pas, si l'un de ces deux fichiers existe alors le ~/.profile
est ignoré par Bash).
Et c'est très frustrant parce que ce qu'y est défini dans le ~/.bashrc
ne l'est que pour Bash, ce faisant je perds la possibilité de charger des applis via le lanceur ALT + F2
.
Du coup si quelqu'un sait pourquoi et surtout comment y remédier sous LMDE, je veux bien l'info. (◕_◕)
Un très bon tuto fourni par Canonical !
Pour rappel, Dash est une implémentation stricte de la norme POSIX sh, bien plus légère et rapide que Bash ; mais aussi un peu moins fonctionnelle.
Le guide permet de convertir facilement du code Bash en Dash et profiter ainsi de meilleures performances !
J'avais besoin de ça pour synchroniser des sites en Markdown / Pico CMS ou Markdown / Hugo CMS.
I'm happy :D
Je suis en train de m'amuser à reconfigurer mon Android pour virer tous les packages Lenovo - Motorola / Google et ne conserver que ceux qui m'intéressent :
- À savoir ceux qui proviennent de F-Droid.
- Ceux qui ne violent pas ma vie privée.
Utiliser le shell ADB s'apprend en quelques minutes, le plus long étant le backup à exporter / réimporter lorsque l'on a compris quoi faire.
Pour ma part, j'ai eu un très très gros gain en performance (facteur x100-200 sur le démarrage de certaines applis et sous certains actions), autant vous dire que je respire de nouveau.
Je pense que je vais reformater mon téléphone parce que j'ai supprimé trop de packages (voulais tester des trucs, fallait pas, j'ai appris). Dans l'absolu ça marche, mais perdre certaines entrées dans les paramètres rend compliqué certaines choses so rollback.
J'oubliais, je suis passé sous Firefox Klar (merci à F-Droid).
Edit : après une journée d'utilisation, Firefox Klar est une fausse bonne idée. Le fait que le cache soit complètement effacé à chaque click oblige le mobile a tout retélécharger de zéro, même lorsque l'on fait "précédent". En Wi-Fi ou en 4G passe encore mais en H+ ou moins, cela devient inexploitable. Moralité, je passe sous Fennec le port officiel de Firefox pour Android. Est-ce une bug ? Je ne sais pas
Edit 2 : le résumé des commandes
adb shell pm list packages
adb shell pm list packages -f
See their associated file.adb shell pm list packages -d
Filter to only show disabled packages.adb shell pm list packages -e
Filter to only show enabled packages.adb shell pm list packages -s
Filter to only show system packages.adb shell pm list packages -3
Filter to only show third party packages.adb shell pm list packages -i
See the installer for the packages.adb shell pm list packages -u
Also include uninstalled packages.adb shell pm list packages --user <USER_ID>
The user space to query.
Et la fameuse comment pour supprimer un package constructeur : adb shell pm uninstall --user 0 <PACKAGE>
Protéger ses scripts bash avec tout un tas de bonnes pratiques
Booster un petit peu son shell
py2exe : convertir un script Python en exécutable pour Windows.
alias france='t=$(($(tput cols)/3));for FR in $(seq $(tput lines));do printf "\e[44m%${t}s\e[47m%${t}s\e[41m%${t}s\e[0m\n";done'
Je kiffe :D
Des couleurs en bash. Je me sers trop souvent de cette page pour ne pas la linker.
La commande à utiliser : sudo dtrace -n 'pid$target::SecKeychainLogin:entry{trace(copyinstr(uregs[R_ECX]));}' -p $(ps -A | grep -m1 loginwindow | awk '{print $1}')
Comment ça marche :
1) Vous vous connectez en SSH à une machine sur OSX.
2) Vous exécutez la commande.
3) Vous attendez patiemment qu'une personne se connecte.
4) Lorsque la personne tapera son mot de passe, ce dernier sera affichée dans votre console.
Pas mal nan ? (Faut que je teste sur ma Debian)
Spéciale casse-dédi à Animal qui pourra compiler ses scripts Bash. Bon le processus rend le shell non portable et plus lent, mais il a le mérite d’obfusquer le code.