Domanda

Ho uno script bash che crea un file patch Subversion per la directory corrente. Voglio modificarlo per comprimere il file prodotto, se -z viene fornito come argomento per lo script.

Ecco la parte pertinente:

zipped=''
zipcommand='>'

if [ "$1" = "-z" ]
then
   zipped='zipped '
   filename="${filename}.zip"
   zipcommand='| zip >'
fi

echo "Creating ${zipped}patch file $filename..."

svn diff $zipcommand $filename

Questo non funziona perché passa il | o > contenuto in $ zipcommand come argomento a svn .

Posso facilmente aggirare questo problema, ma la domanda è se è mai possibile utilizzare questo tipo di operatori quando sono contenuti in variabili.

Grazie!

È stato utile?

Soluzione

Vorrei fare qualcosa del genere (usare bash -c o eval):

zipped=''
zipcommand='>'

if [ "$1" = "-z" ]
then
   zipped='zipped '
   filename="${filename}.zip"
   zipcommand='| zip -@'
fi

echo "Creating ${zipped}patch file $filename..."

eval "svn diff $zipcommand $filename"
# this also works: 
# bash -c "svn diff $zipcommand $filename"

Sembra funzionare, ma la mia versione di zip (Mac OS X) mi ha richiesto di cambiare linea:

zipcommand='| zip -@'

a

zipcommand='| zip - - >'

Modifica: incorporato il suggerimento di @ DanielBungert di usare eval

Altri suggerimenti

eval è quello che stai cercando.

# eval 'printf "foo\nbar" | grep bar'
bar

Fai attenzione con i caratteri di citazione su questo.

Oppure dovresti provare zsh shell che consente di definire alias globali, ad es .:

alias -g L='| less'
alias -g S='| sort'
alias -g U='| uniq -c'

Quindi usa questo comando (che è in qualche modo criptico per quelli che hanno dato un'occhiata da dietro ;-))

./somecommand.sh S U L

HTH

Apri un nuovo handle di file su una sostituzione di processo per gestire la compressione o sul file indicato. Quindi reindirizzare l'output di svn diff sull'handle del file.

if [ "$1" = "-z" ]; then
    zipped='zipped '
    filename=$filename.zip
    exec 3> >(zip > "$filename")
else
    exec 3> "$filename"
fi

echo "Creating ${zipped}patch file $filename"
svn diff >&3
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top