Script shell do Linux - É possível capturar a saída de um comando e usá-lo em outro comando

1

Por isso, quero automatizar o processo de upload de um arquivo para a Rackspace. Aqui está o que preciso fazer:

Primeiro, eu digito:

 curl -D - \
        -H "X-Auth-Key: 123456789abcdefghijk" \
        -H "X-Auth-User: MyUsername" \
        https://auth.api.rackspacecloud.com/v1.0

Isso me devolve uma resposta como:

HTTP/1.1 204 No Content
Server: Apache/2.2.3 (Red Hat)
vary: X-Auth-Token,X-Auth-Key,X-Storage-User,X-Storage-Pass
X-Storage-Url: https://storage101.ord1.clouddrive.com/v1/BlahBlah
Cache-Control: s-maxage=46818
Content-Type: text/xml
Date: Tue, 07 Feb 2012 05:07:09 GMT
X-Auth-Token: SOME_AUTH_TOKEN_I_NEED
X-Storage-Token: blahblah
X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/123456
Connection: Keep-Alive
X-CDN-Management-Url: https://cdn2.clouddrive.com/v1/BlahBlah

Em seguida, preciso fazer o upload de um arquivo:

curl -X PUT -T foo.txt -D - \
     -H "ETag: 7849eb8d56581fa7c4896bb0db64892c" \
     -H "Content-Type: text/plain" \
     -H "X-Auth-Token: SOME_AUTH_TOKEN_I_NEED" \
     -H "X-Object-Meta-Screenie: Test" \
     https://storage101.ord1.clouddrive.com/v1/BlahBlah/MyBackup/foo.txt

Então, basicamente, preciso analisar o token de autenticação (X-Auth-Token), bem como a URL de armazenamento (X-Storage-Url) e criar o próximo comando dinamicamente.

Existe uma maneira de fazer isso com um script de shell, talvez usando expressões regulares ou algo assim? Qualquer ponteiro seria muito apreciado!

    
por Mike Christensen 07.02.2012 / 06:24

1 resposta

3

Há certamente uma solução mais elegante do que isso, mas, acima de tudo, uma forma rápida e suja de fazer isso seria algo como:

#!/bin/bash

xauthtoken='curl -D - \
        -H "X-Auth-Key: 123456789abcdefghijk" \
        -H "X-Auth-User: MyUsername" \
        https://auth.api.rackspacecloud.com/v1.0 | grep X\-Auth\-Token | awk '{print $2}''

xstorageurl='curl -D - \
        -H "X-Auth-Key: 123456789abcdefghijk" \
        -H "X-Auth-User: MyUsername" \
        https://auth.api.rackspacecloud.com/v1.0 | grep X\-Storage\-Url | awk '{print $2}''

curl -X PUT -T foo.txt -D - \
     -H "ETag: 7849eb8d56581fa7c4896bb0db64892c" \
     -H "Content-Type: text/plain" \
     -H "X-Auth-Token: ${xauthtoken}" \
     -H "X-Object-Meta-Screenie: Test" \
     $xstorageurl
    
por 07.02.2012 / 06:43