bash usando um nome de arquivo como entrada

0

Eu gostaria de ter o resultado de

hg resolve -l

que está no formato

R somefile/filename
U somefile/filename
R somefile/filename
U somefile/filename

e poder usar a primeira linha que começa com um "U" como argumento, para que eu possa fazer coisas como

open -t <first U file>

e

hg resolve -m <first U file>

Seria ótimo se alguém pudesse me dar algumas dicas sobre a melhor maneira de fazer isso.

EDIT: uma solução das respostas abaixo, um script simples.

#!/bin/bash

# Script that gets the first file from hg resolve | grep U and passes to default text editor

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }
echo opening \'$first_u_file\'
open -t "$first_u_file"
    
por Dori 31.05.2012 / 10:53

4 respostas

3

Com o GNU grep, você pode tentar isto (não testado):

first_u_file=$(hg resolve -l | grep -m1 '^U')
first_u_file=${first_u_file#U }

-mX informa grep para parar após imprimir as linhas X, 1 neste caso. A construção $(...) é semelhante a backticks, transforma a saída em uma string. A segunda linha remove "U" do início do nome do arquivo.

    
por 31.05.2012 / 11:07
2

Uma solução mais simples:

u_file=$( hg resolve -l | awk '/^U/{print $2; exit}' )
    
por 31.05.2012 / 14:23
1

hg resolve -l | egrep '^U.*' | head -n 1

a saída é o primeiro arquivo U

para usá-lo como argumento open com "U" descartado:

firstUfile='hg resolve -l | egrep '^U.*' | head -n 1 | sed -e 's/^U\s+\(.*\)$/""/''
open -t $firstUfile
    
por 31.05.2012 / 11:02
1

Em vez de apenas abrir o primeiro arquivo, o script pode iterar todos os arquivos não resolvidos:

#!/bin/bash

while read; do
    file="${REPLY#U }"
    echo "Opening '$file'"
    open -t "$file"      
    hg resolve -m "$file"
done <( hg resolve -l | grep "^U" )

(Eu não estou familiarizado com hg ; hg resolve -aln forneceria apenas a lista de arquivos não resolvidos sem o prefixo "U"? Isso eliminaria a necessidade da etapa grep e U-stripping. )

    
por 31.05.2012 / 16:20

Tags