次のスクリプトがあります。
installRequiredFiles=$1
install_with_pkg()
{
arg1=$1
echo $arg1
echo "[+] Running update: $arg1 update."
}
if [ $installRequiredFiles = "true" ]; then
if [ -x "$(command -v apt)" ]; then
install_with_pkg "apt"
elif [ -x "$(command -v yum)" ]; then
install_with_pkg "yum"
elif [ -x "$(command -v apk)" ]; then
install_with_pkg "apk"
else
echo "[!] Can't install files."
fi
fi
直接実行するとうまくいきます。
root@ubuntu:/# ./myscript.sh "true"
apt
[+] Running update: apt update.
Printing installRequiredFiles: true
Printing arg1: apt
ただし、使用すると、sh -c
次のエラーが発生します。
root@ubuntu:/# sh -c ./myscript.sh "true"
./c.sh: 11: [: =: unexpected operator
Printing installRequiredFiles:
Printing arg1:
正しく実行したい、sh -c
現在サポートされている機能をサポートしたいと思いますsh
。bash
ベストアンサー1
これはこのオプションの目的ではありません-c
。通常、ファイルを提供せずにシェルコマンドを提供します。その目的は、次のことを行うことです。
$ sh -c 'echo hello'
hello
これでファイルを提供し、ファイルを読み取り、そこにあるコマンドを実行しようとしましたが、パラメータはスクリプト(myscript.sh
)に渡されず、パラメータはコマンドsh
自体にのみ渡されます。パラメータ:
$ cat script.sh
echo "ARGS: $@"
$ sh ./script.sh true
ARGS: true
$ sh -c ./script.sh true
ARGS:
あなたがしなければならないことは使用しないこと-c
だけであり、期待どおりに機能します。
sh ./myscript.sh "true"
または何らかの理由で使用する必要がある場合は、-c
スクリプトを渡してください。そして一重引用符で囲まれた引数としてスクリプトのパラメータsh
:
sh -c './myscript.sh "true"'