Привет, иногда хочется утащить из скрипта переменные или функции. Это можно легко сделать используя source
. Но есть заковыка. Скрипт-источник будет выполнен, что не всегда удобно. Пример:
$ cat test
#!/bin/bash
var1=bim
var2=bom
echo you should not see this $var1 $var2
Пробуем засорсить:
$ var1= var2=; . ./test; echo $var1 $var2
you should not see this bim bom
bim bom
Мы получили вожделенные переменные но при этом выполнился нежелательный код. Как этого избежать? Можно немного модифицировать скрипт:
$ cat test
#!/bin/bash
var1=bim
var2=bom
[[ $1 == only_vars ]] && return
echo you should not see this $var1 $var2
Теперь если сорсить скрипт с параметром only_vars, нежелательный код будет опущен, пробуем:
$ var1= var2=; . ./test only_vars; echo $var1 $var2
bim bom
Важно использовать именно return
, exit
закроет текущую оболочку.
Творите, выдумывайте, пробуйте!)