Salve cadeia de comando na variável bash

0

Estou executando um comando assim, com a variável $OUTPUT salvando os resultados do comando. Mas eu também quero salvar o comando em si para uma variável para inclusão em um email de status.

OUTPUT=$(php -f $LOCATION/somefile.php -- -process "$INPUTFILE" 2>&1)

A primeira parte funciona. Então eu tentei isso:

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

Mas, em vez de salvar a string para a variável, parece que está apenas executando o comando uma segunda vez.

EDITAR:

Aqui está uma demonstração de como eu crio meu corpo de e-mail. Eu tenho aspas simples em torno de strings regulares e, em seguida, aspas duplas em torno de variáveis bash.

BODY='<b color="red">Output:</b><br />'"$OUTPUT"'<b color="red">Command:</b> '"$IMPORTCOMMAND"

Depois disso, tento substituir as novas linhas por html "e" assim:

BODY="${BODY//$'\n'/<br />}"
#changed $BODY="" to BODY="" per yaegashi's suggestion

O seguinte erro desapareceu depois que eu segui a sugestão de yaegashi:

/usr/local/bin/some-script.sh: line 59: <b: command not found

Mas o erro original permanece na atribuição da variável IMPORTCOMMAND .

    
por Buttle Butkus 23.07.2015 / 03:58

1 resposta

4

Acho que você tem muitas citações e nos lugares errados.

Os seguintes itens tentarão executar somefile.php e não definir IMPORTCOMMAND, pois há um espaço entre php -f e somefile.php.

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

Deve ser:

import_command="php -f $LOCATION/somefile.php -- -process $INPUTFILE"
output=$( ${import_command} 2>&1 )

OR (se 'LOCATION' ou 'INPUTFILE' contiverem espaços)

import_command=( php -f "$LOCATION/somefile.php" -- -process "$INPUTFILE" )
output=$( "${import_command[@]}" 2>&1 )

E exiba-o:

BODY="<b color='red'>Output:</b><br />${output}
      <b color='red'>Command:</b>     ${import_command[*]}"
    
por 23.07.2015 / 05:45