Как мне правильно запустить следующий код bash

#bash #shell #sh

#bash #оболочка #sh

Вопрос:

Привет, я новичок в программировании и bash, мне дали следующий код и сказали запустить его, чтобы установить некоторые необходимые инструменты. Я скопировал и вставил это в терминал, и установка не увенчалась успехом. Я также скопировал и вставил это в .sh файл и выполнил его в терминале, но я ничего не запускал. что я здесь делаю не так

 # Shell Scripting Reference:
# Link: https://tldp.org/LDP/abs/html/
function install_brew {
    # Brew Reference: https://brew.sh/
    # Homebrew Cheatsheet: https://devhints.io/homebrew
    echo "function::install_brew"
    if [[ ! $(command -v brew) ]]; then
        brew_url="https://raw.githubusercontent.com/Homebrew/install/master/install.sh"
        echo "Homebrew is not installed , downloading it"
        $(command -v sh) -c "$(curl -fsSL $brew_url)" 
        else 
        echo "Homebrew is already installed!"
    fi
    echo $(command -v brew)
}
function install_jdk {
    echo "function::install_jdk"
    brew install scala
    brew install sbt
    echo "Finding Shells"
    currentShell=$(ps -p $$ -ocomm=)
    echo "Your current shell is: $currentShell"
    export PATH="/usr/local/opt/openjdk/bin:$PATH"
    export CPPFLAGS="-I/usr/local/opt/openjdk/include"
    # Depending on the environment you use, you may need to update
    # your shell's boot config to persist changes
    if [[ $currentShell =~ "sh" ]]; then
        if [[ $(grep -Fxq 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' ~/.bashrc) ]]; then 
            echo "Appending to PATH (sh) for OpenJDK installation"
            echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.bashrc
            echo 'export CPPFLAGS="-I/usr/local/opt/openjdk/include"' >> ~/.bashrc
            sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
        else
            echo "OpenJDK setup already complete (SH)."
        fi
        else if [[ $currentShell =~ "zsh" ]]; then
            if [[ $(grep -Fxq 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' ~/.zshrc) ]]; then 
                echo "Appending to PATH (zsh) for OpenJDK installation"
                echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc
                echo 'export CPPFLAGS="-I/usr/local/opt/openjdk/include"' >> ~/.zshrc
                sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
            else 
                echo "OpenJDK setup already complete (ZSH)."
            fi
        fi
    fi 
    echo $($(command -v java) -version) amp;amp; echo $($(command -v scala) -version)
}
function install_spark {
    # Reference: Scala Spark Setup
    # https://learnscalaspark.com/getting-started-intellij-scala-apache-spark
    # Reference: PySpark Setup
    # https://medium.com/@achilleus/get-started-with-pyspark-on-mac-using-an-ide-pycharm-b8cbad7d516f
    echo "function::install_spark"
    pkgs=("apache-spark" "python" "virtualenv")
    for i in "${pkgs[@]}"
    do
        brew install $i
    done
    # If you're creating a new virtualenv or even if you're using the one pathed on your computer, you can use pip to install pyspark
}
function install_optionals {
    echo "function::install_optionals"
    optionals=("terraform" "apache-flink")
    for i in "${optionals[@]}"
    do
        brew install $i
    done
}
#install_brew
#install_jdk
#install_spark
#install_optionals
  

Комментарии:

1. Последние 4 строки закомментированы. Вам необходимо удалить #

2. Кстати, обратите внимание, что это медленнее и сложнее, чем просто запуск. $(command -v java) -version java -version

3. … это не единственный антипаттерн здесь, что неудивительно — ABS TLDP несколько печально известен тем, что обучает плохим практикам. В качестве места для начала вы можете рассмотреть wiki.bash-hackers.org/scripting/obsolete и BashPitfalls для описания того, чего следует избегать, BashGuide и BashFAQ , поскольку документация лучше ориентирована на передовую практику, и shellcheck.net (который также может быть установлен локально как инструмент командной строки) в качестве инструмента для выявления распространенных ошибок.

4. если вам ничего не помогло из комментариев выше меня. пожалуйста, подтвердите, что ваш скрипт sh является исполняемым. вы можете запустить: chmod x file_name.sh

Ответ №1:

да, я согласен с вышесказанным относительно отмены комментариев к последним 4 строкам. Единственной другой вещью, которую я заметил, был отсутствующий shebang.

Убедитесь, что файл начинается с: #!/bin/bash

Затем отметьте исполняемый файл: chmod x scriptname.sh

Ответ №2:

В вашем коде bash вы определили 4 функции, но вы не вызывали функции в своем скрипте.

Вам нужно будет запустить каждую функцию. Вы можете сделать это, не комментируя последние 4 строки вашего скрипта.

Комментарии:

1. Если вы добавляете ответ, который только повторяет то, что кто-то сказал в комментарии, хотя и не является строго обязательным, то по правилам этикета следует отметить этот ответ community-wiki (чтобы не получать очки репутации за то, что не является оригинальным контентом).

2. @CharlesDuffy не публиковался на SO более 5 лет. Не зная о функции community-wiki. Спасибо за совет.

3. @CharlesDuffy Кроме того, прокомментированное решение не объясняет, почему раскомментирование строк решает проблему. Как опытный преподаватель, я утверждаю, что это важный компонент хорошего ответа и представляет собой «оригинальный контент»