Shell glob - substitua o caminho do arquivo arg pelo conteúdo do arquivo

3

No comando curl , existe a opção --data , que substitui o conteúdo do arquivo quando o valor da opção é prefixado por @ símbolo como,

curl -X POST --data @abc.json hostaddr.com
O conteúdo do arquivo

abc.json é enviado como o corpo da solicitação de postagem. Esta opção é útil, se o corpo da postagem for longo / multilinha.

Como posso fazer isso em zshell ou pode estar em qualquer shell linux? Existe um glob pattern / prefix operator , que tratará a seguinte string como o caminho do arquivo e substituirá a string pelo conteúdo do arquivo?

    
por Madhavan Kumar 17.04.2015 / 10:58

1 resposta

3

Na maioria dos casos, seria o operador de redirecionamento ( < ):

$ tr 'a' 'b' /path/to/file  ## fails because 'tr' works on streams
tr: extra operand ‘file’
Try 'tr --help' for more information.
$ tr 'a' 'b' < /path/to/file ## works because the file's contents are passed to tr

Tanto a substituição do comando quanto o operador de redirecionamento são definidos pelo POSIX (veja o link dado acima para a substituição do comando) e devem estar disponíveis em praticamente qualquer shell. Outra ferramenta relevante é a substituição de comandos . Existem duas maneiras de escrever isso, você pode incluir um comando em backticks ( 'command' ) ou pode escrever $(command) . Em geral, o último deve ser preferido, pois é uma sintaxe mais poderosa que pode lidar com vários comandos aninhados de forma mais limpa.

Então, para usar o conteúdo de um arquivo, você pode escrever:

command $(cat /path/to/file)

ou

command 'cat /path/to/file'
    
por 17.04.2015 / 11:37