Podrías usar la sustitución de procesos:
less -f <(svn diff this) <(svn diff that)
Pero eso es difícil de usar en un bucle. Probablemente sea mejor usar archivos temporales:
#!/bin/bash
dir=$(mktemp -d)
outfiles=()
IFS=$'\n'
set -f
for file in $(svn status | \grep ^M | sed 's/M //') ; do
outfile=${file#.} # remove leading dot (if any)
outfile=${outfile//\//__} # replace slashes (if any) with __
svn diff "$file" > "$dir/$outfile";
outfiles+=("$dir/$outfile") # collect the filenames to an array
done
less "${outfiles[@]}"
rm -r "$dir"
Lo anterior intenta mantener los nombres de archivo visibles en los nombres de los archivos temporales, con algo de limpieza para barras y puntos iniciales. (En caso de que obtenga rutas como ./foo/bar
. No recuerdo cómo svn
genera los nombres de los archivos, pero de todos modos...)
La matriz está ahí para mantener el orden, aunque como dijo @Kusalananda, podríamos simplemente hacer "$dir"/*
en su lugar, si el orden no importa. set -f
y IFS=$'\n'
en caso de que alguien cree nombres de archivo con caracteres globales o espacios en blanco.
Por supuesto, podríamos simplificar un poco el script y crear, digamos, archivos temporales numerados en su lugar.
Примеры программ, которые устанавливаются в /opt
по умолчанию: