Bash variable available for use outside loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash variable available for use outside loop
# 1  
Old 02-21-2019
Bash variable available for use outside loop

In the below for loop, I extract a variable $d which is an id that will change each time. The bash executes the problem that I am having is that p (after the done) is the path with the extracted $d. However, I can not use it in subsequent loops as it is not reconized. I have been trying to change the code so that I can use p in other loops but can not seem to. I added comments as well. Thank you Smilie.

Code:
for f in /path/to/file/*.zip ; do
    echo "Start directory creation: $(date) - file: $f" >> "$d"/processing.log # log start
     bname=`basename $f` # strip of path
     d="$(echo $bname|cut -d_ -f1)" # remove after first underscore
     unzip $f -d /path/to/file/$d  # unzip folder
#rm -rf $file
      cp /path/to/file/$d/Variants/${d}_v1_${d}_RNA_v1/*full.tsv /path/to/file/ # copy full.tsv for analysis
      cp /path/to/file/$d/Variants/${d}_v1_${d}_RNA_v1/*Non-Filtered*.vcf /path/to/file/  # copy Non-Filtered.vcf for analysis
      mv /path/to/file/$d /path/to/file/
    echo "End directory creation: $(date) - file: $f" >> "$d"/processing.log # log end
done  # end loop
p=/path/to/file/$d  # store path in p
echo $p   # test output

# 2  
Old 02-21-2019
I don't quite understand what you mean exactly but i assume on program rerun you wish to reuse $p from the previous run.
Try saving it as a source file and calling it at any time. I have used the '/tmp/' directory to store the sourcefile in this demo...

Code:
echo '#!/bin/bash' > /tmp/sourcefile
echo "p=${p}" >> /tmp/sourcefile

And source at anytime in any bash shell:
Code:
source /tmp/sourcefile

Example longhand: OSX 10.14.1, default bash terminal.
Code:
Last login: Thu Feb 21 20:10:56 on ttys000
AMIGA:amiga~> p="/usr/bin/local/"
AMIGA:amiga~> echo '#!/bin/bash' > /tmp/sourcefile
AMIGA:amiga~> echo "p=${p}" >> /tmp/sourcefile
AMIGA:amiga~> exit
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

Restart a terminal:
Code:
Last login: Thu Feb 21 20:17:07 on ttys000
AMIGA:amiga~> echo "$p"

AMIGA:amiga~> source /tmp/sourcefile
AMIGA:amiga~> echo "$p"
/usr/bin/local/
AMIGA:amiga~> exit
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

If this is not what you want then re-explain...
Hope this helps...

Last edited by wisecracker; 02-21-2019 at 04:31 PM..
This User Gave Thanks to wisecracker For This Post:
# 3  
Old 02-21-2019
There is nothing in the code above which would prevent $d from being available, so I suspect stripping your example down to the minimum has stripped out the problem, too. The usual gotcha is that assigning variables behind pipes doesn't work, i.e.

Code:
echo asdf | (
...
code block
...
D=1234
)

echo $D

the assignment happens in a subshell, not the outside shell
These 3 Users Gave Thanks to Corona688 For This Post:
# 4  
Old 02-22-2019
Thank you all Smilie.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Bash Variable scope - while loop while reading from a file

Cope sample1: test.sh i=0 echo " Outside loop i = $i " while do i=$(( $i + 1)) echo "Inside loop i = $i " done echo " Out of loop i is : $i " When run output : Outside loop i = 0 Inside loop i = 1 Inside loop i = 2 Inside loop i = 3 Inside loop i = 4 Inside loop i = 5 Inside... (8 Replies)
Discussion started by: Adarshreddy01
8 Replies

2. UNIX for Beginners Questions & Answers

How do I assign the output of a command to a variable within a loop in bash?

In the else of the main if condition . else set lnk = $(readlink -f <path> | cut -d '/' -f7) echo "$lnk" if ] When I run the above on command line , the execution seems to be fine and I get the desired output. But when I try to assign it to a variable within a loop... (12 Replies)
Discussion started by: sankasu
12 Replies

3. Shell Programming and Scripting

Bash for loop with arrays second variable?

I am fairly new to bash and am not sure how to resolve this: I have a series of geographical long/lat points eg. 50/-30 listed on separate lines in a file called junk2. I have input these into an array and am then using that array in a for loop. Towards the end of the loop I create a file called... (4 Replies)
Discussion started by: lily-anne
4 Replies

4. Programming

Global variable in for loop (BASH)

Hello, I'm trying to read the variable "pause" from a for loop without luck. The function is dependant on the outcome of the test within the loop. If i run this, pause is always 0 within the function. Any ideas? Thanks. pause=0 users=1 (for (( ; ; )) do speed=`cat speed.log` ... (7 Replies)
Discussion started by: shadyuk
7 Replies

5. Shell Programming and Scripting

Detail on For loop for multiple file input and bash variable usage

Dear mentors, I just need little explanation regarding for loop to give input to awk script for file in `ls *.txt |sort -t"_" -k2n,2`; do awk script $file done which sorts file in order, and will input one after another file in order to awk script suppose if I have to input 2 or... (4 Replies)
Discussion started by: Akshay Hegde
4 Replies

6. Shell Programming and Scripting

Array Variable being Assigned Values in Loop, But Gone when Loop Completes???

Hello All, Maybe I'm Missing something here but I have NOOO idea what the heck is going on with this....? I have a Variable that contains a PATTERN of what I'm considering "Illegal Characters". So what I'm doing is looping through a string containing some of these "Illegal Characters". Now... (5 Replies)
Discussion started by: mrm5102
5 Replies

7. UNIX for Dummies Questions & Answers

Help with 3 variable bash loop

Hi all! I think someone might be able to solve my problem pretty easily. I am trying to run a bash loop with 3 variables. I know how to do: for var1 in `cat list1`; do for var2 in `cat list2`; do for var3 in `cat list3`; command var1 var2 > var3; done; done; done However, this will run all... (4 Replies)
Discussion started by: torchij
4 Replies

8. Shell Programming and Scripting

(BASH) Using a loop variable to grep something in a file?

Hi, I have a loop running until a variable L that is read previously in the full script. I'd like to grep some information in an input file at a line that contains the value of the loop parameter $i. I've tried to use grep, but the problem is nothing is written in the FILE files. It seems grep... (5 Replies)
Discussion started by: DMini
5 Replies

9. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

10. Shell Programming and Scripting

bash and ksh: variable lost in loop in bash?

Hi, I use AIX (ksh) and Linux (bash) servers. I'm trying to do scripts to will run in both ksh and bash, and most of the time it works. But this time I don't get it in bash (I'm more familar in ksh). The goal of my script if to read a "config file" (like "ini" file), and make various report.... (2 Replies)
Discussion started by: estienne
2 Replies
Login or Register to Ask a Question