web-dev-qa-db-fra.com

Mise en retrait de la sortie multiligne dans un script shell

J'essaie de changer le message du jour (MOTD) sur mon boîtier Ubuntu Amazon EC2 afin qu'il affiche le statut git de l'un de mes répertoires lorsque je suis SSH.

La sortie de tous les fichiers MOTD par défaut comporte deux espaces au début de chaque ligne, elle a donc l'air bien en retrait, mais comme ma sortie git status s'étend sur plusieurs lignes, si je ne echo -n " " avant elle n'indente que la première ligne.

Une idée de comment je peux le faire pour indenter chaque ligne?

Merci!

52
Matt Fletcher

Dirigez-le sur sed pour insérer 2 espaces au début de chaque ligne.

git status | sed 's/^/  /'
82
Barmar

En s'appuyant sur la réponse de @ Barmar, voici une façon plus simple de le faire:

indent() { sed 's/^/  /'; }

git status | indent
other_command | indent
31
Marplesoft

Merci à @Barmar et @Marplesoft pour certaines solutions simples et agréables - voici une autre variante que d'autres aimeraient peut-être - une fonction permettant de déterminer le nombre de niveaux d'indentation à l'aide de pr:

indent() {
  local indentSize=2
  local indent=1
  if [ -n "$1" ]; then indent=$1; fi
  pr -to $(($indent * $indentSize))
}

# Example usage
ls -al | indent
git status | indent 2
1
Oliver Dungey