How to Force command substitution evaluation in bash?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to Force command substitution evaluation in bash?
# 1  
Old 03-26-2016
How to Force command substitution evaluation in bash?

OK, I'm striving to abide by all the rules this time.

Here is a fragment of my windows10/cygwin64/bash script:
Code:
export BUPLOG=$(BackupRecords --log "$src")
robocopy  $(BackupRecords -mrbd "$src" --path "$src")  $(BackupRecords --appSwitches "$src") "$src" "$dst"  $(BackupRecords --fileSwitches "$src") >$BUPLOG 2>&1
BackupRecords --complete "$src"
echo \*\*\* ALL DONE \*\*\* >>$BUPLOG 2>&1

"BackupRecords --log" is a program I wrote to return a unique log file name using the current time.

The problem is that I get two different log files. How can I force the evaluation of BUGLOG sooner?


Thanks
Siegfried
# 2  
Old 03-26-2016
What two log files do you get?

Show us the source for your BackupRecords program. Do you really need to invoke BackupRecords five times in a four line script?
# 3  
Old 03-27-2016
How can you have two file names? You're calling "BackupRecords --log" just once and then use the shell variable, which is not modified in between.
Do other "BackupRecords --xxx" calls have side effects?
# 4  
Old 03-27-2016
Quote:
Originally Posted by RudiC
How can you have two file names? You're calling "BackupRecords --log" just once and then use the shell variable, which is not modified in between.
Do other "BackupRecords --xxx" calls have side effects?
Even if running BackupRecords has side effects, all invocations are in subshell environments (so, except for the first invocation of BackupRecords, they shouldn't be able to affect he value of the BUPLOG variable in the invoking script). The only thing that makes sense to me is that value returned by BackupRecords --log must return a string that includes a command substitution (from the description, probably including an invocation of the date utility) that produces different results each time $BUPLOG is expanded. But, the only way to know for sure is to see the source for BackupRecords.
# 5  
Old 03-29-2016
Yes! As I you inferred: $(BackupRecords --log) very similar to $(date +'%Y %b %d %H:%M:%ss'). If I call it too often, I get different log files (which is usually what I want).

However, in this case, I want the same log file for multiple uses within the same script. How can I evaluate $(BackupRecords --log) only once at the beginning of my script once and use it multiple times later in the script?

Thanks
Siegfried
# 6  
Old 03-29-2016
I agree with the others in that the answer lies somewhere in your BackupRecords script...
# 7  
Old 03-29-2016
Why don't you keep using BUPLOG all over, then?
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Evaluation of test command

Could somebody please explain to me why and how the highlighted line(s) (?) of code puts the "test" evaluation into "result" and then to $enable_static ? Or does not ? I did comment out the original code and changed it to what I feel is less cryptic , but the "result" is still wrong =... (3 Replies)
Discussion started by: anne
3 Replies

2. Shell Programming and Scripting

How to Force command substitution evaluation in bash?

OK, I'm striving to abide by all the rules this time. Here is a fragment of my windows10/cygwin64/bash script: export BUPLOG=$(BackupRecords --log "$src") robocopy $(BackupRecords -mrbd "$src" --path "$src") $(BackupRecords --appSwitches "$src") "$src" "$dst" $(BackupRecords --fileSwitches... (0 Replies)
Discussion started by: siegfried
0 Replies

3. Shell Programming and Scripting

Bash regex evaluation not workin

I'm building a script that may received start and end date as parameters. I whant to make it as flexible as possible so I'm accepting epoch and date in a way that "date --date=" command may accept. In order to know if parameter provided is an epoc or a "date --date=" string I evaluate if the value... (2 Replies)
Discussion started by: lramirev
2 Replies

4. Shell Programming and Scripting

bash, command line substitution

I have one script calling another with a set of strings that includes white space. Script A calls Script B with these input strings: one two "th ree" Script B pulls apart the arguments correctly: arg0 = one, arg1 = two, arg2 = "th ree" if I call it from within Script A like so:... (10 Replies)
Discussion started by: skippyV
10 Replies

5. UNIX for Dummies Questions & Answers

cp command evaluation

Hi all! I'm writting one script to copy a file in various folders, but there are 2 things to validate. First that the folder where i'll be cpying exists, and second that i have permissions to copy the file in it. so far i have found the way to validate the folder exists, but when trying to... (6 Replies)
Discussion started by: feliperivera
6 Replies

6. Shell Programming and Scripting

Correct bash substitution

Hello! I'm writing a shell script using #!/bin/bash instead of #!/bin/sh because of the substitution: ${!variable}, which won't work with sh. My main problem is the following (just a summarized example, the script is much more complex): # sourced from a configuration file, we have a lot of... (6 Replies)
Discussion started by: teresaejunior
6 Replies

7. Shell Programming and Scripting

[bash] command line substitution with environmental variables

Hi, I'm using an array that contains compiler FLAGS that need to be executed either before ./configure or after the main 'make' command. example of array containing compiler flags. ------------------------------------------------- FLAGS="CFLAGS=\"-arch x86_64 -g -Os -pipe... (7 Replies)
Discussion started by: ASGR
7 Replies

8. Shell Programming and Scripting

/bin/bash - variable substitution.

Is it possible with a bash variable to perform multiple substitution strings to one variable? I have this variable: echo $clock TIMEZONE="US/Central" What I would like to do with bash only it pull out just the "US" part of the variable.. which could be any number of countries. this is... (6 Replies)
Discussion started by: trey85stang
6 Replies

9. Shell Programming and Scripting

How do I perform double substitution in bash?

#!/bin/bash #set -x MAX=255 FILE=$1.dns_list #declare -a d_arr if then echo "Usage: `basename $0` network" echo " e.g.`basename $0` 1.1.1" exit fi echo "Remove file $FILE..." rm $FILE for (( i = 1; i < $MAX; i++ )) do PARSE=$(host $1.${i}) ... (3 Replies)
Discussion started by: flee
3 Replies
Login or Register to Ask a Question