Substituição de parâmetros em sh -c

0

Eu tenho um grande número de arquivos de log, a idéia é agrupá-los por data / mês e depois compactar em arquivos.
Aqui está meu script:

find /c/this/path/ -type f -name "$file_pattern" | xargs -I fn basename fn | cut -c$start-$end | uniq | xargs -I {} sh -c "tar zcvf {}-$postfix.tgz {}$file_pattern"

todas as variáveis são definidas. No entanto, quando eu executo isso (chame uma função que contém este script), o arquivo não é criado e nenhum erro é mostrado. Quando eu executo isso manualmente, com parâmetros codificados, ele funciona bem. Meu palpite é que eu estraguei tudo com a substituição de parâmetros.
By the way, eu corro isso no Windows usando comandos que vêm com a instalação msysgit (se isso faz alguma diferença).

    
por chester89 06.04.2015 / 17:58

3 respostas

0

Se eu entendi sua pergunta, você quer saber como passar argumentos para o script especificado por -c

...|xargs -I {} sh -c 'tar zcvf "$1"-'"$postfix"'.tgz "$1"'"$file_pattern" _ {}

O primeiro argumento após o script ( _ ) se tornará $0 em sh e o próximo argumento ( {} de xargs) será $1 . A mistura de aspas simples e duplas é um pouco complicada, mas necessária, já que você tem alguns parâmetros que você precisa para substituir agora e alguns que você precisa do sh para manipular.

    
por 06.04.2015 / 18:15
0

Você tem que chamar suas variáveis assim ${variable} em vez de $variable também é uma convenção para escrevê-lo em Caps como ${VARIABLE}

    
por 06.04.2015 / 18:24
0

Parece-me que entendi o problema. Script em si é bom. file_pattern é definido como: file_pattern=*.log No entanto, no diretório atual, eu tinha um arquivo que corresponde a esse caractere curinga (por exemplo, algo.log) - e a variável file_pattern foi preenchida com o nome desse arquivo. Depois que eu envolvi a avaliação file_pattern entre aspas duplas, estava tudo bem. Pode ser que alguém me diga por que essa expansão?
EDIT Eu escapei do asterisco assim: file_pattern=\*.log e script funciona bem agora

    
por 06.04.2015 / 18:49

Tags