1

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?

manifestor
  • 2,473

1 Answers1

2

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
pLumo
  • 22,565
  • Yes, of course it works, I had a very strupid mistake I overlooked, sorry for that and thank you for your efforts. – manifestor Apr 05 '19 at 12:17
  • Nevermind, mistakes happen to everyone. And the most stupid mistakes are the most difficult to see. Would you tell us what the mistake was? – pLumo Apr 05 '19 at 12:18
  • If I tell you, you will kill me :) I forgot to remove an exit, which I have placed at the beginning where I performed some tests in order not to trigger the remaining execution of the script. I recognized it as I triggered the script with /bin/bash -x - I'm very sorry! Sh** happens ))))) – manifestor Apr 05 '19 at 12:21