Você pode usar a substituição de processos:
less -f <(svn diff this) <(svn diff that)
Mas isso é difícil de usar em um loop. Provavelmente, é melhor usar apenas arquivos temporários:
#!/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"
O acima tenta manter os nomes de arquivos visíveis nos nomes dos arquivos temporários, com alguma limpeza para barras e pontos principais. (No caso de você obter caminhos como ./foo/bar
. Não consigo me lembrar de como svn
exibe os nomes dos arquivos, mas de qualquer forma ...)
A matriz está lá para manter o pedido, embora, como disse @Kusalananda, pudéssemos fazer apenas "$dir"/*
, se a ordem não importasse. set -f
e IFS=$'\n'
no caso de alguém criar nomes de arquivo com caracteres glob ou espaço em branco.
É claro que podemos simplificar o script e criar, digamos, arquivos temporários numerados.