[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash question: get output as a variable?



On Fri, Feb 5, 2010 at 7:10 PM, Chris Jackson <c.jackson@shadowcat.co.uk> wrote:
> Dotan Cohen wrote:
>
>> I'm scripting a backup solution, the line that does the business looks
>> like this:
>>
>> tar -zcvf - *  --exclude-from $EXCLUDES  | openssl des3 -salt -k $1 |
>> dd of=$(hostname)-$(date +%Y%m%d).tbz
>>
>> Because of the "v" flag tar writes to stdout the name of each file
>> copied. How can I get that output redirected to a variable, to use
>> later in the script?
>>
>> Thanks!
>>
>
>
> Use $() like you do with the date command. You have to redirect stderr back
> to stdout, which means running it in a subshell:
>
>
> FILES=$( ( tar -zcvf - *  --exclude-from $EXCLUDES  | openssl des3 -salt -k
> $1 | dd of=$(hostname)-$(date +%Y%m%d).tbz ) 2>&1 )
>
> It may cause unexpected results if there're spaces in the filenames though.

If there are spaces in filenames, you can try:

$ n=0; while read l; do files[n]="$l"; ((n++)); done < <((tar -zvcf -
* | openssl > $(hostname)-$(date +%Y%m%d)) 2>&1)

Regards,


Reply to: