Linux
僅使用“sh -c”呼叫 shell 腳本時出錯:“意外運算符”
我有以下腳本:
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
目前支持。
這不是
-c
選項的用途。你通常不給它一個文件,你給它shell命令。它用於執行以下操作:$ 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"'