Cela se fait en deux temps :
- Installer l'outil
entr
(sudo apt install entr). - Utiliser le oneliner suivant
while sleep 1 ; do find . -name '*.py' | entr -d MY_COMMAND WITH PARAMS ; done
C'est assez simple en fait : toute commande C/C++ reçoit le flux provenant de fd 0 par convention (il y a aussi fd 1).
De facto vous pouvez écrire :
#!/usr/bin/env bash
PIPE=`cat`
macommande $PIPE $*
# $PIPE c'est le flux
# $* ce sont les paramètres
Pour détecter la présence d'un pipe :
if [ -t 0 ]; then
echo "Via des params"
else
echo "Dans un pipe"
fi
Rappel
Maven Wrapper est un petit script à positionner à la racine de votre projet et qui vous permettra :
- De définir la bonne version de Maven avec laquelle vous pouvez builder votre projet.
- De récupérer automatiquement cette version
Problème
Pour exécuter vos commandes de build, il ne faut plus taper
mvn clean install
mais
./mvnw clean install
Inconvénients :
- Le "./" a ajouter devant la commande est fastidieux.
- Si vous êtes dans un sous-module, vous devrez faire un "../mvnw clean install" et cela fait perdre du temps.
Solution
Elle est en trois phases :
-
Installer une version de Maven dans votre poste
- Sans l'ajouter à votre PATH
- Mais en créant la variable MAVEN_HOME
-
Ajouter le script suivant dans votre .bashrc
_build_mvnw_dir() {
echo "$1/mvnw"
}
_find_mvnw() {
currentDir=`pwd`
while [ "$currentDir" != "" ]; do
isMvnwDir=`_is_mvnw_dir "$currentDir"`
if [ "$isMvnwDir" == "true" ]; then
break
else
currentDir=`_get_parent_dir "$currentDir"`
fi
done
if [ "$currentDir" == "" ]; then
echo ""
else
_build_mvnw_dir "$currentDir"
fi
}
_get_parent_dir() {
echo "$currentDir" | sed "s|^\(.*\)/[^/.]*$|\1|"
}
_is_mvnw_dir() {
if [ -f "$1/mvnw" ]; then
echo "true"
else
echo "false"
fi
}
_mvn() {
mvnwPath=`_find_mvnw`
if [ "$mvnwPath" == "" ]; then
$MAVEN_HOME/bin/mvn $*
else
eval "$mvnwPath $*"
fi
}
- Ajouter l'alias suivant à votre .bash_aliases
alias mvn='_mvn'
Fonctionnement
Utiliser Maven comme vous en avez l'habitude, le script va simplement utilise Maven Wrapper s'il est définit dans votre projet, sinon il utiliser l'installation "par défaut" que vous avez faite de Maven dans le répertoire $MAVEN_HOME.
Seul bémol, le test prend une seconde par IP, mais ça fait le taf (je l'améliorerai au besoin) :
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done
Comment ajouter l'autocompletion dans le shell
1) Installer le paquet :
apt-get install bash-completion
2) Ajouter à votre ~/.bashrc :
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Et voilà !
Un framework de test pour ses scripts Bash : shunit2
# N.B : le $6$ dans le sel signifie utiliser l'algorithme SHA-512. $5$ c'est SHA-256 par exemple
# Et le sel doit finir par Salt$
python -c 'import crypt; print crypt.crypt("MON_MOT_DE_PASS", "$6$MON_SELSalt$")'
Récupérer le PID en bash.
## Récupérer le PID du processus courant :
$$
## Récupérer le PID de la commande qui vient d'être lancée :
$!
Protéger ses scripts bash avec tout un tas de bonnes pratiques
Un vrai cours sur Bash.
Des couleurs en bash. Je me sers trop souvent de cette page pour ne pas la linker.
Quand vous travaillez sous Git, ce serait sympa d'avoir des jolies couleurs pour séparer dans votre prompt : user / chemin / branche
Ajouter ceci à la fin de votre fichier ~/.bashrc.
# Setting GIT prompt
c_cyan=`tput setaf 6`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_sgr0=`tput sgr0`
branch_color() {
if git rev-parse --git-dir >/dev/null 2>&1
then
color=""
if git diff --quiet 2>/dev/null >&2
then
color=${c_cyan}
else
color=${c_green}
fi
else
return 0
fi
echo -n $color
}
parse_git_branch() {
if git rev-parse --git-dir >/dev/null 2>&1
then
gitver="["$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')"]"
else
return 0
fi
echo -e $gitver
}
# It's important to escape colors with \[ to indicate the length is 0
PS1='\[\033[1;34m\]\u\[\033[1;37m\]@\[\033[1;31m\]\h\[\033[1;37m\]:\[\033[33m\]\w \[$(branch_color)\]$(parse_git_branch)\[${c_sgr0}\]\[\033[37m\]\n\$'
Un tuto sur Bash et ses subtilités
Pour les basheurs.
Via Alexis J : http://liens.effingo.be/?wbScfg