Intereting Posts
Зашифрованный своп не активируется на Ubuntu yum требует более старой версии пакета в качестве зависимости Установка и размонтирование в том же сценарии оболочки приводит к ошибке Сценарий оболочки останавливается автоматически примерно через 1 минуту что мне нужно делать с «человеком: невозможно установить локаль; убедитесь, что $ LC_ * и $ LANG верны " Создание экрана не работает на crontab Скопируйте вложенные папки, содержащие не менее n файлов PostgreSQL Ubuntu 16.04 Fedora 15: Twitter в Google Chrome Активировать нажатие, чтобы нажать на сенсорную панель? MobaXterm: Как видеть вывод терминала на предыдущих командах, все еще находясь в VIM? (Эквивалент «Shift + Page Up» в PuTTY) Предотвращение приостановки монетного двора во время воспроизведения музыки в Spotify Перезаписано 60 МБ смонтированной файловой системы из другой файловой системы с dd Как разделить доступ Wi-Fi через hotspot (например, fon) через мою сеть ethernet? Как указать параметры конфигурации среды выполнения subversion?

bash source script.sh с выходом 0

Я использую большое количество внешних файлов в своих сценариях.

Но у меня есть проблема, что если я отправлю файл с exit в содержимое файла, скрипт выйдет из загрузки, а строки, которые я хочу использовать, исчезли.

Пример main.sh :

 #!/bin/bash clear; source /opt/external-svn/config.sh; echo "$var1 and $var2 and $var3"; 

Пример config.sh :

 #!/bin/bash var1="foo bar is great" var2="foooo baar is greater" var3="foooooooo baaaaaar is \ to long" exit 0 

Проблема заключается в многострочном var3 , поэтому я хочу использовать источник для var1 и var2 . Возможно следующее, но не приятно:

 var1=$(cat "/opt/external-svn/config.sh" |awk -F'"' '/^var1/ {print $2}'); 

Это работает только для одной строки, а не для var3 .

Есть ли простое / простое решение?

обновить, потому что я глуп, чтобы сделать правильный ответ

@Gilles не работает файл в raw здесь для предложений raw.githubusercontent.com/gorgone/temptest/master/config.sh

 #!/bin/bash FILE="/tmp/$(basename $0).$$.tmp" configsh="/opt/external-svn/config.sh" grep -vE '^exit' $configsh > $TFILE source "$TFILE" 

выйти из главного экрана и получить эхо на экран

@Anthon тоже не работает для моего файла на github

Update2 нашел решение

я нашел магию ONE, я использую эту идею, но ее не является общим решением

только для моего особого случая

 cat config.sh |sed 's/if [ $# = 0 ]/if [ $# = 1 ]/g' >config.source 

поэтому я могу указать файл

но лучший способ – иметь общее решение для всех файлов

Если у вас есть abc.inc :

 x=1 exit 0 

и klm.inc :

 y=2 exit 0 

то, если у вас есть combine скрипт:

 #!/bin/bash for fn in abc klm; do grep -vE '^exit' $fn.inc > /tmp/xyz.tmp source /tmp/xyz.tmp done echo x: $x echo y: $y 

вы можете запустить combine и получить его как результат:

 x: 1 y: 2 

Это предполагает, что ваш оператор exit находится в начале их строк, вам, возможно, придется настроить grep если они не являются

Вы можете переопределить exit в своем main.sh , объявив пользовательскую функцию exit в начале main.sh

 #!/bin/bash # main.sh exit() { local exit_code="${1-?}" test "$exit_code" -ne 0 && builtin exit "$exit_code" : } clear; source /opt/external-svn/config.sh; echo "$var1 and $var2 and $var3"; #unset -f exit; exit 0 builtin exit 0