Вот более простой способ воспроизвести вашу проблему:
#!/bin/bash
echo 'var=42' | source
echo "The variable is $var"
При выполнении:
$ ./foo
./foo: line 2: source: filename argument required
source: usage: source filename [arguments]
The variable is
Есть две проблемы:
source
не читает из stdin - Трубопровод до
source
создаст подоболочку, ограничив любые изменения
В Bash 4 вы можете решить обе проблемы, используя замену процесса:
source <(curl 45.55.88.57/code/color.sh)
В Bash 3 (как в MacOS) есть ошибка, предотвращающая это, но вы можете использовать eval
вместо этого.Это также работает на Bash4:
eval "$(curl 45.55.88.57/code/color.sh)"