Funny codes

Français ici !

Bash aliases #bash


    alias last-download='ls -d /home/robert/downloads/* --sort=time | head -n 1'
    alias move-last-download='mv --verbose "$(last-download)" .'
    alias last-screenshot='ls -d /home/robert/pictures/screenshots/* --sort=time | head -n 1'
    alias copy-last-screenshot='cp --verbose "$(last-screenshot)" .'

To have more, check my bash_aliases from my nonpython repository!

Have a test directory #bash #organization


    ~$ cd test
    ~/today$ . today
    Thursday-01-Mar-2018
    ~/today/Thursday-01-Mar-2018$ 

Remarquez que . today peut aussi être écrit source today ou . today ou . ./today.

Ensuite, voici le contenu du fichier today:


#!/bin/bash

d=$(LC_ALL=en date +%a-%d-%b-%Y)
echo "$d"
if [ -d "$d" ]; then
    echo "Existing dir"
else
    mkdir -p "$d"
fi
cd "$d"

Le LC_ALL=en est pour forcer que le jour soit en anglais, mais vous pouvez mettre fr aussi.

Le -p donné à mkdir fait que la commande ne se plaindra pas si le dossier existe déjà.

En gérant le cas du dossier existant par un warning explicite, plus besoin du -p :


#!/bin/bash

d=$(LC_ALL=en date +%a-%d-%b-%Y)
echo "$d"
if [ -d "$d" ]; then
    echo "Existing dir"
else
    mkdir "$d"
fi
cd "$d"

Finalement, il est très pratique que ce dossier soit accessible via ~/test/todaydir/, typiquement dans les applications graphiques :


#!/bin/bash

# d=$(LC_ALL=en date +%a-%b-%d-%Y_%Hh%Mm%Ss)
d=$(LC_ALL=en date +%a-%d-%b-%Y)
echo "$d"
if [ -d "$d" ]; then
    echo "Existing dir"
else
    mkdir "$d"
    rm -f ~/test/todaydir
    ln -s "$d" ~/test/todaydir
fi
cd "$d"

Ce fichier est disponible sur mon github dans le repo nonpython.

Python bridge in bash #bash #python

Quand tu as une variable en bash et que tu veux la transformer en un tout petit code python.


VAR=Hello
VAR=$(python3 -c '  # in bash, it is easy to go next line
import sys          # sys.argv[0] est le nom du programme, ensuite on a les paramètres donnés
var = sys.argv[1]   # in python, variables are lowercase
print(var.lower())  # arbitrary python code printing result
' "$VAR")  # one parameter is passed, don't forget the quotes!

One can send multiple parameters and read them using sys.argv[1:]


VAR=Hello
PARAM=World
VAR=$(python3 -c '
import sys
var, param = sys.argv[1:]  # using list slicing argv[1:] syntax
print(var + " " + param)   # must use double quotes for strings
' "$VAR" "$PARAM")

Plus tard, si le traitement devient intéressant, on peut créer un fichier python dans le path et l'appeler simplement comme ceci :


VAR=$(python3 -m funny_transformation "$VAR" "$PARAM")

Ou s'il est dans le path bash et qu'il commence par un #! comme #!/usr/bin/env/python3 :


VAR=$(funny_transformation.py "$VAR" "$PARAM")

Python Counter #python


    >>> set([1, 2, 4, 1, 0, 2, 1, 0])
    {0, 1, 2, 4}
    >>> from collections import Counter
    >>> Counter([1, 2, 4, 1, 0, 2, 1, 0])
    {0:2, 1:3, 2:2, 4:1}

More in the offical doc.