Executando o código bash interativamente usando o flag -c

2

Estou tentando executar um fragmento de shell com o interpretador bash . Usar o sinalizador -c me permite fornecer os comandos diretamente na linha de comando sem gravar em um arquivo. Isso é necessário para meu uso.

Exemplo de trabalho:

$ bash -c 'free -m'

O problema é que o fragmento de shell real que eu quero executar tem aspas simples nele.

find / -type f -size +50M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' 

Eu imaginei que simplesmente escapar das citações funcionaria:

$ bash -c 'find / -type f -size +50M -exec ls -lh {} \; | awk \'{ print $9 ": " $5 }\''

Mas isso não funciona. Não executa o comando.

Além disso, o mesmo tipo de problema, eu preciso ser capaz de executar o Node.js a partir da linha de comando sem gravar em um arquivo.

$ node -e 'console.log("hello");'

Os trabalhos acima, mas:

$ node -e 'console.log('hello');'

and

$ node -e 'console.log(\'hello\');'

Ambos quebram.

Idéias? Obrigado.

    
por Justin 02.08.2012 / 06:44

1 resposta

3

Tente isto:

$ bash -c $'find / -type f -size +50M -exec ls -lh {} \; | awk \'{ print $9 ": " $5 }\''

Do man bash :

   Words of the form $'string' are treated specially.  The word expands to string,  with  backslash-escaped
   characters  replaced  as  specified by the ANSI C standard.  Backslash escape sequences, if present, are
   decoded as follows:
          \a     alert (bell)
          \b     backspace
          \e     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \     backslash
          \'     single quote
          \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
          \cx    a control-x character
    
por 02.08.2012 / 06:59