2

シェルスクリプトの一部を別のシェルスクリプトに抽出しましたが、何らかの理由でサブスクリプトを呼び出した後、コマンド置換が機能しなくなりました。サブスクリプトに何かが含まれているとは想像できませんが、自分が何を間違っているのかもわかりません。

私がするかどうか:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

または私はします:

dirname "$0"                                      # works
echo "`dirname "$0"`"                             # works
echo "$(dirname "$0")"                            # works
cat <<< "`dirname "$0"`"                          # works
cat <<< "$(dirname "$0")"                         # works
"`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"  # call the sub-script
dirname "$0"                                      # works
echo "`dirname "$0"`"                             # empty string
echo "$(dirname "$0")"                            # empty string
cat <<< "`dirname "$0"`"                          # crash
cat <<< "$(dirname "$0")"                         # crash

dirnameは正常に機能しているようですが、バックティックして機能を$()停止します。コマンド置換は空の文字列を返すだけです。

編集:すべての二重引用符を削除し""ても効果はありません

EDIT2:サブスクリプトを呼び出すときにbashを明示的に実行しても効果はありません

EDIT3:"$(dirname "$0")"変数に保存して使用しても効果はありません

EDIT4:同じechoコマンドをサブスクリプトに追加すると、サブスクリプトのすべてが正常であることを示します

EDIT5:リクエストに応じて、スクリプトの出力

/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
/home/jayen/rep
#setup_buildroot.sh output here
/home/jayen/rep


bash: syntax error near unexpected token `newline'
bash: syntax error near unexpected token `newline'
4

2 に答える 2

1

サブスクリプトを呼び出すと、既存のbashスクリプトのセッションの環境変数が壊れているように感じます。たぶん、添え字の行の前に、を付けてみてくださいbash

bash "`dirname "$0"`"/setup_buildroot.sh "$BUILDROOT"

それで問題が解決するかどうかを確認してください。これは奇妙な状況です。

私がお勧めする他の解決策は、最初の行にあります。

mydir="$0"

$0すべてをに置き換えます$mydir

そしてさらに良いことに、

mydir=`dirname "$0"`

前もってコマンドを繰り返し実行しないでください。

于 2012-11-19T05:15:27.323 に答える
0

意味がありませんが、添え字を調達してみてください

. "$(dirname "$0")"/setup_buildroot.sh "$BUILDROOT" # call the sub-script
于 2012-11-19T05:27:02.990 に答える