Bash: Sourcing file with an Array into main script [closed]

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I have a script, which will parse an array like:

#!/bin/bash
URLs=(
...
"https://www.example.com"
"https://www.example.com/contact"
);
for URL in ${URLs[*]} ; ...

Now what I'm trying to do is to outsource the URLs array into another file, pass that file as $1 and source it (source $1) into my script. Unfortunately URLs stays empty.

This is the file with the outsourced URLs array, which I'm trying to pass:

#!/bin/bash
URLs=(
...
"https://www.example.com"
"https://www.example.com/contact"
);

I'm calling the script like this:

./original.sh /absolute/path/to/array.sh

And, of course the original.sh:

#!/bin/bash
source $1;
for URL in ${URLs[*]} ; ...
# e.g. curl ${URL}
# Tried also:
for URL in ${URLs[@]} ; ...

The idea is that I have different lists/files with URLs, which need to be passed to one single script in order to be parsed. Does anyone has an idea how I could do that?

profilepic.png
manpreet 2 years ago

I don't see any issue in your script, it works for me, although you should always use quoted "${var[@]}" notation and also use quotes around variables / file names (source "$1").


This works well:

script array.sh:

#!/bin/bash
URLs=(
"example"
"something"
"something else"
)

script original.sh:

#!/bin/bash
source "$1"
for URL in "${URLs[@]}"; do
    echo "$URL"
done

works well for me:

$ ./original.sh array.sh
example
something
something else

Easier solution of loading list data without needing to source using readarray:

config:

example
something
something else

script:

readarray URLs < config
for URL in "${URLs[@]}"; do
    echo "$URL"
done

or using xargs:

 xargs -a config -I{} echo {}

or feed it directly into wget or aria2c if your goal is to download the urls:

wget -i config
aria2c -i config

0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.