bash(shebang)添字を呼び出すsh(shebang #!/bin/sh
)スクリプト()があります。sh.sh
#!/bin/bash
. "some-path/bash.sh"
Bashスクリプトには連想配列宣言があるため、declare -A properties
エラーが発生しますdeclare: not found
。
declare
親スクリプトがbashではなくshスクリプトなので、見つからない理由は明らかです。
bash構文を強制する方法はありますか?
別の方法は、新しいシェルを開く方法です。これは、サブスクリプトの目的が親スクリプトで使用する変数を定義することであるため、問題になります。子シェルは親シェルの変数を台無しにしてはいけません。
親(sh.sh):
#!/bin/sh
. "some-path/bash.sh"
子(bash.sh):
#!/bin/bash
declare -A properties
私が試している使い方:
./sh.sh
答え1
スクリプト(source script
または. script
)をインポートしないでください。
代わりに正常に実行してくださいscript
。
答え2
親スクリプトをそのまま実行するのではなく、./sh.sh
bash:を使用して実行しますbash sh.sh
。すでに作業中です。
隠された家があります。 sh は bash のサブセットです。正しいかどうかはわかりませんが、うまくいきます。
答え3
Ubuntuとの互換性のために、bashでオプションを使用してスクリプトを呼び出し、同じ終了コードを返すこれを書いています。
#!/bin/bash
if [ `readlink /proc/$$/exe` != "/bin/bash" ];then
bash "$0" "$@"
exit $?
fi
echo "Shell: "`readlink /proc/$$/exe`
編集:良いキャッチ、修正済み