95 votes

Indentation de la sortie multi-lignes dans un shell script.

J'essaie de modifier 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 me connecte en SSH.

La sortie de tous les fichiers MOTD par défaut comporte deux espaces au début de chaque ligne afin qu'elle ait l'air bien indentée, mais comme mon fichier git status s'étend sur plusieurs lignes, si je fais echo -n " " avant qu'il n'indente seulement la première ligne.

Vous avez une idée de la façon dont je peux faire en sorte que chaque ligne soit indentée ?

153voto

Barmar Points 135986

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

git status | sed 's/^/  /'

52voto

Marplesoft Points 1876

Dans le prolongement de la réponse de @Barmar, voici une façon plus ordonnée de procéder :

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

git status | indent
other_command | indent

17voto

Oly Points 108

Merci à @Barmar et @Marplesoft pour leurs solutions simples et efficaces. Voici une autre variante qui pourrait plaire à d'autres - une fonction permettant de déterminer le nombre de niveaux de retrait à l'aide de la fonction 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

1voto

gntskn Points 199

Voici une fonction que j'ai écrite pour indenter également stderr :

function indented {
  local PIPE_DIRECTORY=$(mktemp -d)
  trap "rm -rf '$PIPE_DIRECTORY'" EXIT

  mkfifo "$PIPE_DIRECTORY/stdout"
  mkfifo "$PIPE_DIRECTORY/stderr"

  "$@" >"$PIPE_DIRECTORY/stdout" 2>"$PIPE_DIRECTORY/stderr" &
  local CHILD_PID=$!

  sed 's/^/  /' "$PIPE_DIRECTORY/stdout" &
  sed 's/^/  /' "$PIPE_DIRECTORY/stderr" >&2 &
  wait "$CHILD_PID"
  rm -rf "$PIPE_DIRECTORY"
}

Utilise-le comme ça :

indented git status
indented ls -al

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X