bash ソース script.sh と終了 0

bash ソース 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使いたいです。次は可能ですが、あまり良くありません。var1var2

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

これは単一行でのみ機能しますvar3

シンプルで簡単な解決策はありますか?

あまりにも愚かで正しい答えが出ていないので更新

@Gilles 元のファイルで作業せずにここからアドバイスを求めます。 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が解決策を見つけました

魔法のような方法を見つけてこのアイデアを使用しましたが、一般的な解決策ではありません。

私の特別な場合にのみ

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

これにより、ファイルのソースを取得できます。

しかし、最良の方法は、すべてのファイルのためのユニバーサルソリューションを保持することです。

ベストアンサー1

exit.main.shexitmain.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

おすすめ記事